根据wikibooks ...
@one下面 是属于类对象的实例变量(注意这与类变量不同,不能被称为@@one)@@value是一个类变量(类似于Java或C++中的static). @two 是属于 MyClass 实例的实例变量. 我的问题:
@one和@@值之间有什么区别?
另外,有没有理由使用@one?
class MyClass
@one = 1
@@value = 1
def initialize()
@two = 2
end
end
Run Code Online (Sandbox Code Playgroud)
@one是类的一个实例变量MyClass和@@value是类变量MyClass.由于@one是一个实例变量它仅由类所拥有MyClass(在Ruby类也对象),而不是可共享的,但是@@value是一个共享变量.
共享变量
class A
@@var = 12
end
class B < A
def self.meth
@@var
end
end
B.meth # => 12
Run Code Online (Sandbox Code Playgroud)
非共享变量
class A
@var = 12
end
class B < A
def self.meth
@var
end
end
B.meth # => nil
Run Code Online (Sandbox Code Playgroud)
@two是类的实例的实例变量MyClass.
实例变量是对象的私有属性,因此它们不会共享它.在Ruby中,类也是对象.@one你在一个类中定义MyClass,因此它只由定义它的类所拥有.另一方面,@two当您要创建类的对象(MyClass例如ob,使用)时,将创建实例变量MyClass.new.@two只有它所有ob,没有其他任何对象有任何想法.