考虑以下代码:
class Polygon
@sides=1
@@sides = 10
class << self; attr_accessor :sides end
def self.sides
@@sides
end
end
如果我打印sides
:
p Polygon.sides
我得到10
。如果我更改class
和self.sides
的顺序,我会得到1
。这种行为的原因是什么?如何独立于方法的顺序调用@@sides
或@sides
?
修改
我发现这个优秀的post讨论了类变量,类实例变量和实例变量之间的区别。
答案 0 :(得分:1)
class << self; attr_accessor :sides end
相当于:
def self.sides
@sides
end
def self.sides=(arg)
@sides = arg
end
然后这个sides
方法被覆盖。
使用两个方法(使用不同的名称)来访问这两个变量(或将它们放在一个数组中并在方法中返回)。