@ - 实例变量 @@ - 类变量。
因此,如果没有创建实例,则不应共享实例变量值。但是:
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
为什么?
答案 0 :(得分:3)
Ruby中的每个类也是一个对象,Class
类的实例。因此,您的@a
只是Add
类的实例变量。
答案 1 :(得分:2)
singleton method中您指的@a
是Add类的实例变量。
当您将方法定义为def self.add
而不是def add
时,您已有效地将方法声明的范围更改为本征类。