【发布时间】:2016-02-09 15:14:09
【问题描述】:
我正在阅读“Pickaxe Book”,作者给出了以下示例,作为在不使用实例变量的情况下提供模块/mixin 状态的技术:
...模块可以使用模块级哈希,由当前索引 对象 ID,用于存储特定于实例的数据...
module Test
State = {}
def state=(value)
State[object_id] = value
end
def state
State[object_id]
end
end
class Client
include Test
end
c1 = Client.new
c2 = Client.new
c1.state = 'cat'
c2.state = 'dog'
c1.state # => "cat"
c2.state # => "dog"
我不清楚这到底是如何工作的。特别是object_id。 object_id 方法如何能够以这种方式访问Client 实例?我尝试使用length 来查看它是否会根据该索引进行索引,但我得到了:
NameError: undefined local variable or method `length' for #<Client:0x00000000ecc570>
我想确保我理解这里发生的事情的原则。
【问题讨论】:
-
不要在 Stack Overflow 上使用
<pre>代码,只需缩进 4 个空格。<pre>没有进行正确的 HTML 转义,因此看起来像标签的内容(例如<Client:0x00000000ecc570>)不会显示出来。 -
哦。哎呀!感谢您的提示。