1

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

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

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

为什么?

4

2 回答 2

3

Ruby 中的每个类也是一个对象,Class类的实例。所以,你@a只是Add类的实例变量。

于 2013-11-13T16:14:14.073 回答
2

您在单例方法@a中所指的是Add 类的实例变量。

当您将方法定义为def self.add而不是def add.

于 2013-11-13T16:12:50.050 回答