区别于@&引用;属于类对象的实例变量和@@&引用;Ruby中的类变量?

区别于@&引用;属于类对象的实例变量和@@&引用;Ruby中的类变量?,ruby,Ruby,根据 下面的@one是属于类对象的实例变量(注意这与类变量不同,不能称为@@one) @@value是一个类变量(类似于Java或C++中的static) @two是属于MyClass实例的实例变量 我的问题: @one和@value之间有什么区别? 还有,使用@one有什么理由吗 class MyClass @one = 1 @@value = 1 def initialize() @two = 2 end end @one是类MyClass的实例变量,@@va

根据

  • 下面的
    @one
    是属于类对象的实例变量(注意这与类变量不同,不能称为
    @@one
  • @@value
    是一个类变量(类似于Java或C++中的static)
  • @two
    是属于MyClass实例的实例变量
我的问题:

@one和@value之间有什么区别?
还有,使用@one有什么理由吗

class MyClass
  @one = 1
  @@value = 1

  def initialize()
    @two = 2
  end
end

@one
是类
MyClass
的实例变量,
@@value
是类变量
MyClass
。由于
@one
是一个实例变量,它只属于类
MyClass
(在Ruby类中也是object)所有,不可共享,但
@@value
是一个共享变量

共享变量

class A
  @@var = 12
end

class B < A
  def self.meth
    @@var
  end
end

B.meth # => 12
class A
  @var = 12
end

class B < A
  def self.meth
    @var
  end
end

B.meth # => nil
A类
@@var=12
结束
B类12
非共享变量

class A
  @@var = 12
end

class B < A
  def self.meth
    @@var
  end
end

B.meth # => 12
class A
  @var = 12
end

class B < A
  def self.meth
    @var
  end
end

B.meth # => nil
A类
@var=12
结束
B类
@two
是类
MyClass
实例的实例变量


实例变量是对象的私有属性,因此它们不会共享它。在Ruby中,类也是对象
@one
您在类
MyClass
中定义,因此它只属于定义它的类。另一方面,当您使用
MyClass.new
创建类
MyClass
的对象时,例如
ob
,将创建两个
实例变量
@two
仅属于
ob
,其他对象对此一无所知。

我认为应该由谁来持有信息或能够执行任务(因为类方法和实例方法是一样的)

班级人员
@@人=[]
def初始化(名称)
@name=name

@@人们,
@one
@two
有何不同?我知道@two属于MyClass的实例,但我不明白一个实例变量怎么可能只属于class对象而不属于一个类的实例。@ayjay现在清楚了吗?是的。谢谢你的解释@ayjay很高兴帮助你……)