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中,一切都是一个对象。每一点信息和代码都可以赋予它们自己的属性和动作。”