我听说在Ruby中一切都是对象。我在面试中回答变量也是一个对象,但面试官否认了我的回答。有人知道真相吗?
"在Ruby中,几乎所有东西都是对象"基本上是正确的。
但更准确地说,我会说任何可以赋值给变量或从方法返回的值都是一个对象。一个变量是一个对象吗?不完全是。变量只是一个对象的名称(也称为“指针”),它允许您在内存中找到该对象并对其进行操作。
shajin = Person.new()
在这段代码片段中,我们有一个变量shajin
,它指向一个对象(人类类的一个实例)。该变量仅仅是一个对象的标识符,而不是对象本身。为何不直接查看源代码呢?Ruby语言规范非常明确和显而易见(本人加粗):
6.2 变量
6.2.1 概述
变量由名称表示,并引用称为变量的值的对象。变量本身不是一个对象。
http://www.techotopia.com/index.php/Understanding_Ruby_Variables
在 Ruby 中,变量只是一个容器的标签。 变量可以包含几乎任何东西 - 字符串、数组、哈希等。 变量名只能包含小写字母、数字和下划线。 变量名最好在程序上下文中有意义。
a = 1
1是一个对象,'a'是对1对象的引用。如果'a'本身是一个对象,它将有自己的object_id。但是:
1.object_id #=> 3
a.object_id #=> 3
obj = 1.method(:+)
- steenslag@Alex Wayne和@Jörg W Mittag的回答是正确的,但我想补充一点,即“不是所有”重要的东西都是对象。例如,方法和块不是对象,但可以通过method
方法和proc分别转换为对象。