@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 によるこの記事を参照してください。