加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:17:19 所属栏目:百科 来源:网络整理
导读:参见英文答案 Ruby class instance variable vs. class variable????????????????????????????????????5个 根据 wikibooks …… @one下面是属于类对象的实例变量(注意这与类变量不同,不能称为@@ one) @@ value是一个类变量(类似于Java或C中的static). @two是
参见英文答案 > Ruby class instance variable vs. class variable????????????????????????????????????5个
根据 wikibooks ……

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

我的问题:

@one和@@值之间有什么区别?
另外,有没有理由使用@one?

class MyClass
  @one = 1
  @@value = 1

  def initialize()
    @two = 2
  end
end

解决方法

@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

非共享变量

class A
  @var = 12
end

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

B.meth # => nil

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

实例变量是对象的私有属性,因此它们不会共享它.在Ruby中,类也是对象. @one你在MyClass类中定义,因此它只由定义它的类所拥有.另一方面,当您使用MyClass.new创建MyClass类的对象时,将创建@two实例变量. @two只归ob所有,其他任何对象都不知道它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读