【发布时间】:2010-07-02 11:43:43
【问题描述】:
我想用一行表达式初始化几个auto-vivifying hashes。到目前为止,我为AutoHash 对象找到了一个额外的方法:
class AutoHash < Hash
...
def few(n=0)
Array.new(n) { AutoHash.new }
end
这让我可以做以下事情
a, b, c = AutoHash.new.few 3
但是,我觉得可以通过定义一个新的运算符:=来使下面的句子成为可能
a := b := c = AutoHash.new
你能帮我实现这个吗?
我必须使用superators吗?
require 'superators'
class AutoHash < Hash
...
superator ":=" do |operand|
if operand.kind_of? Hash
...
else
...
end
end
更新: 现在我看到需要在类之外定义运算符。是否可以定义这样的对象克隆操作符?
Update2 方法few的更清晰定义,感谢Joshua
参考文献
【问题讨论】:
-
您意识到您当前的 a = b = c = AutoHash.new.few 3 将使所有变量引用相同的哈希实例?如果您不希望这样, := 运算符的实现可能需要调用 clone() 并且您会遇到通常的“我想要深度克隆吗?”问题。
-
操作,抱歉。我已经修好了。谢谢
标签: ruby hash initialization reference autovivification