@sides=10ステートメントが実行されるときのこの小さなクラスでは?
このステートメントはinitializeメソッドにどのように関連していますか?
class Poligon
attr_accessor :sides
@sides=10
end
私は主に、属性のインライン初期化が一般的な Java に慣れています。Ruby の完全な初期化手順を理解しようとしていますが、見つけることができませんでした。
@sides=10ステートメントが実行されるときのこの小さなクラスでは?
このステートメントはinitializeメソッドにどのように関連していますか?
class Poligon
attr_accessor :sides
@sides=10
end
私は主に、属性のインライン初期化が一般的な Java に慣れています。Ruby の完全な初期化手順を理解しようとしていますが、見つけることができませんでした。
初期化メソッドは、クラスのコンストラクターです。必要に応じて、コンストラクターでインスタンス変数を初期化できます。
class Poligon
attr_accessor :sides
def initialize(num_sides)
@sides = num_sides
end
end
しかし、@sidesは として宣言されているattr_accessorため、直接設定/取得できます。
p = Poligon.new
p.sides = 10
短い答え:
ステートメン@sides = 0(実際には式です) は、class式が評価されるときに実行されます。
initializeメソッドとはまったく関係ありません。
これを書くと、@sides変数はクラス インスタンス変数、つまりオブジェクトのインスタンス変数になりPoligonます (Ruby では、クラスはクラスのオブジェクトであることを思い出してClassください)。メソッド定義内 (おそらくメソッド内) でインスタンス変数を初期化する必要がありますinitialize。次の例を検討してください。
class Poligon
@class_sides = 'class instance variable'
def initialize
@instance_sides = 'instance variable'
end
end
Poligon.instance_variables
# => [:@class_sides]
Poligon.instance_variable_get(:@class_sides)
# => "class instance variable"
Poligon.new.instance_variables
# => [:@instance_sides]
Poligon.new.instance_variable_get(:@instance_sides)
# => "instance variable"
クラス インスタンス変数の詳細とクラス変数との関係については、Martin Fowler によるこの記事を参照してください。