ruby - 局部变量、实例变量和类变量有什么区别?

标签 ruby instance-variables local-variables class-variables

<分区>

Possible Duplicate:
Difference between class variables and class instance variables?

在阅读 Ruby 书籍时,我似乎错过了变量章节。现在我似乎无法理解以下内容:

  1. 什么是实例变量?
  2. 什么是类实例变量?
  3. 变量@instance_var@class_instance_var 之间有什么区别?

我试着看了不同博客的一些帖子,还是没看懂。任何帮助将不胜感激。

最佳答案

What is an instance variable?

它是一个变量,具有与该类实例相关的独立值。例如,Person 类可以将 @name@age 作为实例变量。 Person 的所有实例都有姓名和年龄,但每个实例对这些事物都有不同的值。


What is a class instance variable?

这有点奇怪,但您必须意识到 Person 类本身是 Class 的一个实例。所以它也可以有实例变量。这通常用于配置类。就像将 API key 添加到类中,以便可以使用该数据创建所有实例。

class PersonFetcher

  # class method can set class instance variables
  def self.set_api_key(key)
    @api_key = key
  end

  # instance method sets instance variables
  def set_name(name)
    @name = name
  end

end

What is the difference between a variable, @instance_var and @class_instance_var?

它是如何持续存在的。

变量 是本地的。它只是对对象的引用。一旦没有代码或对象引用这个值,它就会通过垃圾收集被销毁。只有您继续使用它,它才会持续存在。

@instance_var 在一个实例上持续存在。只要实例存在,它所拥有的实例变量也会存在。只要 Person 实例存在,该实例就会有一个 @name

@class_instance_var 保留在类对象上(记住它是 Class 的一个实例)。因此它将永远存在于类对象中,因为您永远无法真正摆脱已声明的类。

关于ruby - 局部变量、实例变量和类变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14127805/

相关文章:

python - 为什么在函数中使用模块后重新导入会抛出异常?

ruby-on-rails - Nokogiri 安装失败 - 缺少 libxml2

iphone - 应该得到 20 个错误...但是在没有声明实例变量的情况下编译时得到 0...

java - 为什么我们不能通过未初始化的局部变量访问静态内容?

c - 这些局部变量地址背后的基本原理是什么?

java - Java中的实例变量是什么?

ruby - bash 的包装,控制 STDIN 和 STDOUT

ruby - 集会 API : documentation list of fields for portfolio items?

ruby - 为什么 ruby​​ .hash 每次都会产生不同的输出

python - 无法从另一个类python访问变量