@ - 实例变量 @@ - 类变量。
因此,如果没有创建实例,则不应共享实例变量值。但:
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
为什么?
@ - 实例变量 @@ - 类变量。
因此,如果没有创建实例,则不应共享实例变量值。但:
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
为什么?
Ruby 中的每个类也是一个对象,Class
类的实例。所以,你@a
只是Add
类的实例变量。
您在单例方法@a
中所指的是Add 类的实例变量。
当您将方法定义为def self.add
而不是def add
.