在Ruby中,变量名不是对象。为什么?

时间:2012-02-21 17:48:22

标签: ruby

这出现在10 Things Every Java Programmer Should Know About Ruby谈话的幻灯片6中。

现在,我回顾了一些答案,而普遍的共识是任何有价值的东西,不仅仅是指针,都是一个对象。我很困惑。如果a = 1a将与1共享方法,实际上它们将具有相同的object_id。如何说“一个是一个对象”不准确?

1 个答案:

答案 0 :(得分:4)

幻灯片说的是正确的:变量不是对象。然而,这里的第二个陈述 - “任何有价值的东西,而不仅仅是一个指针,都是一个对象” - 在Ruby的上下文中甚至没有意义,它没有“仅仅指针”与“有价值的东西”不同对象”。

问题是,变量a不与对象1共享方法。它肯定与1不一样,因为否则如果你后来写了a = 2,你就完全抹掉了数字1!变量只是一个包含对象1的引用的地方。你不能像对象一样谈论这个地方 - 例如,正如你所指出的,变量没有明显的object_id。您可以对变量执行的唯一操作是与它引用的对象进行对话,并使用对不同对象的引用重新分配它。变量本身不是一个对象,它只是一个存储对象引用的地方。