通过并行分配迭代哈希列表
Iterating over list of hashes via parallel assignment
我刚刚看到这段代码(简化版):
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
现在可以了。但是为什么需要这些默认值呢?
这里究竟发生了什么?
有没有更好的方法来迭代扩展它们的哈希列表?
也将不胜感激指向文档的指针。
Now it works. But why are those default values needed at all?
它们不是,您可以省略默认值:
something { |key1:, key2:| puts "key1:#{key1}, key2:#{key2}" }
# key1:1, key2:2
我刚刚看到这段代码(简化版):
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
现在可以了。但是为什么需要这些默认值呢?
这里究竟发生了什么? 有没有更好的方法来迭代扩展它们的哈希列表? 也将不胜感激指向文档的指针。
Now it works. But why are those default values needed at all?
它们不是,您可以省略默认值:
something { |key1:, key2:| puts "key1:#{key1}, key2:#{key2}" }
# key1:1, key2:2