这出现在10 Things Every Java Programmer Should Know About Ruby谈话的幻灯片6中。
现在,我回顾了一些答案,而普遍的共识是任何有价值的东西,不仅仅是指针,都是一个对象。我很困惑。如果a = 1
,a
将与1
共享方法,实际上它们将具有相同的object_id
。如何说“一个是一个对象”不准确?
答案 0 :(得分:4)
幻灯片说的是正确的:变量不是对象。然而,这里的第二个陈述 - “任何有价值的东西,而不仅仅是一个指针,都是一个对象” - 在Ruby的上下文中甚至没有意义,它没有“仅仅指针”与“有价值的东西”不同对象”。
问题是,变量a
不与对象1
共享方法。它肯定与1
不一样,因为否则如果你后来写了a = 2
,你就完全抹掉了数字1!变量只是一个包含对象1
的引用的地方。你不能像对象一样谈论这个地方 - 例如,正如你所指出的,变量没有明显的object_id
。您可以对变量执行的唯一操作是与它引用的对象进行对话,并使用对不同对象的引用重新分配它。变量本身不是一个对象,它只是一个存储对象引用的地方。