Ruby 中属于类对象的“@”实例变量和“@@”类变量之间的区别? [复制]

2024-04-14

根据维基教科书 http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Instance_Variables...

  • @one below 是一个实例变量属于类对象(请注意,这与类变量不同,不能称为@@one)
  • @@value is 一个类变量(类似于 Java 或 C++ 中的 static)。
  • @two 是一个实例变量属于实例我的班级.

我的问题:

@one 和 @@value 有什么区别?
另外,有理由使用@one吗?

class MyClass
  @one = 1
  @@value = 1

  def initialize()
    @two = 2
  end
end

@one是类的实例变量MyClass and @@value是类变量MyClass. As @one是一个实例变量,仅由该类拥有MyClass (在 Ruby 中,类也是对象), not 可分享的, but @@value is a 共享变量.

共享变量

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

@two是类实例的实例变量MyClass.

实例变量是对象的私有属性,因此它们不会共享它。在 Ruby 中,类也是对象。@one你在类中定义MyClass,因此它仅由定义它的类拥有。另一方面@two当您创建类的对象时,将创建实例变量MyClass, say ob, using MyClass.new. @two只属于ob,没有其他对象对此有任何想法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 中属于类对象的“@”实例变量和“@@”类变量之间的区别? [复制] 的相关文章

随机推荐