我想初始化几个自动激活哈希值通过一行表达式。到目前为止,我找到了一种额外的方法AutoHash
object:
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
你能帮我实现这个吗?
我必须使用超级者?
require 'superators'
class AutoHash < Hash
...
superator ":=" do |operand|
if operand.kind_of? Hash
...
else
...
end
end
Update:现在我发现运算符需要在类之外定义。是否可以定义这样的对象克隆运算符?
Update2方法定义更清晰few
,感谢约书亚
参考
- http://www.linux-mag.com/cache/7432/1.html
- Ruby 是否像 PHP 一样支持 var 引用?
- http://ruby.about.com/od/advancedruby/a/deepcopy.htm
你要求的地方a := b := c := AutoHash.new.few 3
我认为(不确定我理解你的愿望)你真的想要a,b,c=Autohash.new.few 3
当您只使用第一个时,为什么很少有变量参数?
我还发现您创建的返回值很令人困惑,也许可以尝试
def few(n=0)
Array.new(n) { AutoHash.new }
end
除此之外,似乎few
应该是一个类方法。a,b,c=AutoHash.few 3
如果你在类中定义了一些,那么这将起作用:
def AutoHash.few(n=0)
Array.new(n) { AutoHash.new }
end
If a,b,c=AutoHash.few 3
不是您要找的东西,而您really想要实现自己的运算符,然后查看黑客解析.y,这是 RubyConf 2009 上的一次演讲。您可以在以下网址观看该演示文稿:http://rubyconf2009.confreaks.com/19-nov-2009-17-15-hacking-parsey-tatsuhiro-ujihisa.html您可以在以下位置查看幻灯片:http://www.slideshare.net/ujihisa/hacking-parsey-rubyconf-2009
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)