2012-05-05 4 views
0

私は新しいが、initializeメソッドを使用し、それらの属性を設定するだろうと思った?私がnil、nilを取得するが、私は結果は9であることが予想、「マイSoduko」なぜこのメソッドは表示される変数を初期化しませんか?

class Soduko 
    attr_accessor :name, :rows, :columns 
    def initialize 
    rows = 9 
    columns = 9 
    name = 'My Soduko' 
    end 
end 

new_soduko= Soduko.new 
puts new_soduko.rows 
puts new_soduko.name 

$ ruby soduko.rb 
nil 
nil 

答えて

4

initializeメソッドで必要なものはinstance variableです。名前の前に@を付けてインスタンス変数を作成します。 new_soduko = Soduko.newで新しいSodukoオブジェクトを作成すると、その特定のオブジェクトのインスタンス変数を設定します。 @がなければ、initializeメソッドでローカル変数を作成したばかりです。

class Soduko 
    attr_accessor :name, :rows, :columns 
    def initialize 
    @rows = 9   # adding @ makes these instance variables. 
    @columns = 9 
    @name = 'My Soduko' 
    end 
end 

new_soduko= Soduko.new 
puts new_soduko.rows 
puts new_soduko.name 
+1

代わりに、setterを呼び出すこともできます。 'self.rows = 9; self.columns = 9、self.name = '私の数独'。 –

関連する問題