我刚刚看到了这段代码(简化):
def something
yield(key1: 1, key2: 2)
end
something { |key1: key1, key2: key2| puts "key1:#{key1}, key2:#{key2}" }
# (irb):351: warning: circular argument reference - key1
# (irb):351: warning: circular argument reference - key2
# key1:1, key2:2
正如预期的那样,有一个循环引用......但请稍等!key1
并且key2
被正确定义!
好的,所以它们是之前定义的,这意味着我可以完全摆脱散列,对吗?
something { |key1, key2| puts "key1:#{key1}, key2:#{key2}" }
# key1:{:key1=>1, :key2=>2}, key2:
不,循环参考很棒!但是......并行分配不起作用,第一个变量获取整个哈希。
所以我试着清理一些东西:
something { |key1: nil, key2: nil| puts "key1:#{key1}, key2:#{key2}" }
# key1:1, key2:2
现在它起作用了。但是为什么需要这些默认值呢?
这里到底发生了什么?有没有更好的方法来迭代散列列表来扩展它们?指向文档的指针也将不胜感激。