class Polygon
attr_accessor :sides
@sides = 10
end
当我尝试访问
时puts Polygon.new.sides # => nil
我没有。如何进入双方? 这有什么不对?
答案 0 :(得分:4)
由于ruby类定义只是可执行代码,当你在类定义的上下文中说@sides = 10
时,你在Polygon
上定义了它(不是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
答案 1 :(得分:1)
你需要:
def initialize
@sides = 10
end
通过在类级别分配@sides
,您创建了一个类实例变量而不是使用{{1创建的对象的实例变量 }}
在这种情况下,您有一个给定#new
的属性,但如果它实际上是该类的属性(如 author 或 copyright 或某物) )然后你可以通过Polygon,
语法引用它,如果你在类方法中,是用@whatever
创建的。
答案 2 :(得分:1)
简而言之,attr_accessor定义了两种方法。
def sides
end
def sides=
end
要获得此处提到的边的值,您需要在
中初始化它们def initialize
@sides = 10
end
答案 3 :(得分:1)
这个确切的问题(即使使用相同的示例代码)也会在railstips.org上得到解答。