类变量与类级实例变量

时间:2015-03-08 16:09:27

标签: ruby

考虑以下代码:

class Polygon
  @sides=1
  @@sides = 10
  class << self; attr_accessor :sides end
  def self.sides
    @@sides
  end
end

如果我打印sides

p Polygon.sides

我得到10。如果我更改classself.sides的顺序,我会得到1。这种行为的原因是什么?如何独立于方法的顺序调用@@sides@sides

修改

我发现这个优秀的post讨论了类变量,类实例变量和实例变量之间的区别。

1 个答案:

答案 0 :(得分:1)

class << self; attr_accessor :sides end

相当于:

def self.sides
  @sides
end

def self.sides=(arg)
  @sides = arg
end

然后这个sides方法被覆盖。 使用两个方法(使用不同的名称)来访问这两个变量(或将它们放在一个数组中并在方法中返回)。