class Polygon
attr_accessor :sides
@sides = 10
end
アクセスしようとすると
puts Polygon.new.sides # => nil
私はゼロになります。サイドにアクセスする方法は?ここで何が問題になっていますか?
class Polygon
attr_accessor :sides
@sides = 10
end
アクセスしようとすると
puts Polygon.new.sides # => nil
私はゼロになります。サイドにアクセスする方法は?ここで何が問題になっていますか?
rubyクラス定義は単なる実行可能コードであるため、クラス定義のコンテキストで言うと、それを(Polygonのインスタンスではなく)で@sides = 10
定義していることになります。Polygon
class Polygon
attr_accessor :sides
@sides = 10
end
Polygon.instance_variables
# => [:@sides]
イニシャライザから、Polygonのインスタンスの辺の数を設定することをお勧めします。
class Polygon
attr_accessor :sides
def initialize(sides)
@sides = sides
end
end
Polygon.new(10).sides
# => 10
必要なもの:
def initialize
@sides = 10
end
@sides
クラスレベルでに割り当てることにより、で作成したオブジェクトのインスタンス変数ではなく、クラスインスタンス変数を作成しました。#new
この場合、指定された属性がありますがPolygon,
、それが実際にクラスの属性(作成者、著作権など)である場合は、で作成されたクラスメソッドを使用している場合@whatever
は、構文を介してそれを参照できます。def self.something ... end
要するに、attr_accessorは2つのメソッドを定義します。
def sides
end
def sides=
end
ここで言及した辺の値を取得するには、それらを初期化する必要があります
def initialize
@sides = 10
end
この正確な質問(あなたが持っているのと同じサンプルコードを使用している場合でも)は、railstips.orgで回答されています。