【发布时间】:2012-01-28 04:49:48
【问题描述】:
这不完全是单例,但很接近,所以我想这很常见。我有一个类 (Foo),其中实例对应于具有唯一 ID 的外部数据结构。我想确保没有两个 Foo 实例可以具有相同的 ID - 如果使用相同的 id 值调用构造函数,则具有该 ID 的 original Foo 实例以及所有其他值都会简单地更新.换句话说,类似于:
class Foo
def initialize(id, var1, var2)
if Foo.already_has? id
t = Foo.get_object(id)
t.var1 = var1
t.var2 = var2
return t
else
@var1 = var1
@var2 = var2
end
end
我可以想到两种方法来做到这一点:
我可以将 Foo 的所有实例的数组保留为类级变量,然后在初始化方法结束时调用 foo_instances.push(self)。这让我觉得有点丑陋。
我相信 Ruby 已经在某个数组中跟踪每个类的实例 - 如果是这样,这是否可以访问,它会比 #1 更好吗?
??? (Ruby 似乎支持一些巧妙的 [元] 编程技巧,所以如果我已经缺少一种整洁的方法,我不会感到惊讶。
【问题讨论】: