Ruby:变量是ruby中的对象吗?

我听说ruby中的所有东西都是对象。 我在接受采访时回答说变量是一个对象,面试官说不。 有人知道真相吗?

“在ruby中,一切都是对象”基本上是正确的。

但更准确地说,我会说可以分配给变量或从方法返回的任何值都是一个对象。 变量是一个对象吗? 并不是的。 变量只是一个对象的名称(也称为“指针”),它允许您在内存中找到它并对其进行处理。

shajin = Person.new() 

在这个片段中,我们有一个变量shajin ,它指向一个对象(person类的一个实例)。 变量只是对象的标识符,但不是对象本身。

我认为这是一个棘手的问题。 最终,面向对象是人类理解复杂程序的特征,但计算机本身并不是面向对象的。 向下钻取足够的图层和对象不再以任何语言存在。

因此,或许更公平地说:“在ruby中, 重要的是一切都是一个对象”。

为什么不直接去源? Ruby语言规范不可能更明确和明显(我强调):

6.2变量

6.2.1一般说明

变量由名称表示,并引用一个对象,称为变量的值。 变量本身不是对象

http://www.techotopia.com/index.php/Understanding_Ruby_Variables

“Ruby中的变量只是容器的标签。变量几乎可以包含任何东西 – 字符串,数组,散列。变量名称可能只包含小写字母,数字和下划线。理想情况下,变量名称应该有意义在你的程序中。“

“我们将从Ruby是一种completely面向对象的语言开始。每个值都是一个对象(……)。”(Ruby Programming Language,Flanagan&Matsumoto,第2页)。 请注意,本书由语言创建者共同撰写,并未说明“一切都是对象”。

 a = 1 

1是对象,’a’是对1对象的引用。 如果’a’是它自己的对象,它将拥有它自己的object_id。 但:

 1.object_id #=> 3 a.object_id #=> 3 

此外, 方法不是真正的对象 (但如果需要,您可以将它们转换为对象)。

@Alex Wayne和@JörgWMittag answears是正确的,但我想补充说“并非一切”重要的是一个对象。 类似方法和块不是对象,但可以分别使用method方法和proc转换为对象。

http://www.ruby-lang.org/en/about/

“在Ruby中,一切都是一个对象。每一点信息和代码都可以赋予它们自己的属性和动作。”