ruby中的实例变量就像类变量一样

时间:2013-11-13 16:07:32

标签: ruby variables instance-variables class-variables

@ - 实例变量 @@ - 类变量。

因此,如果没有创建实例,则不应共享实例变量值。但是:

class Add

  def self.add(what)
    if not defined? @a
      @a = 0
    end
    @a += what
    puts @a.to_s
  end
end

Add.add(4)
Add.add(4)

结果:

$ruby main.rb

4
8

为什么?

2 个答案:

答案 0 :(得分:3)

Ruby中的每个类也是一个对象,Class类的实例。因此,您的@a只是Add类的实例变量。

答案 1 :(得分:2)

singleton method中您指的@a是Add类的实例变量。

当您将方法定义为def self.add而不是def add时,您已有效地将方法声明的范围更改为本征类。