class Polygon
attr_accessor :sides
@sides = 10
end
当我尝试访问
时puts Polygon.new.sides # => nil
我得到了零。如何访问侧面?这里怎么了?
由于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
这个确切的问题(甚至使用您拥有的相同示例代码),在railstips.org上回答。
attr_accessor,简而言之定义了两种方法。
def sides
end
def sides=
end
要获得此处提到的侧面的价值,您需要在
中启动它们def initialize
@sides = 10
end
您需要:
def initialize
@sides = 10
end
通过在类级别分配给@sides
,您创建了一个 class实例变量,而不是用#new
。实例变量
在这种情况下,您具有给定Polygon,
的属性,但是如果它实际上是类的属性(例如 wurs 或 em>或版权所有之类的东西),那么您可以通过 @whatever
语法引用它,如果您是在类方法中,用def self.something ... end
。