在 Ruby 2.7 中解构块参数中的哈希
Destructure a Hash in block arguments in Ruby 2.7
这个:
[{a: 1, b: 2}, {a: 3, b: 4}].each do |a:, b:| p a end
在 Ruby 2.7
中引发以下警告
warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
我知道 each
正在将哈希传递给块,并且块现在接受 |a:, b:|
作为命名参数但是,有什么方法可以在这种情况下正确地解构哈希?
我不确定,但我想也许这个想法是使用模式匹配来进行散列解构?例如:
{a: 1, b: 2}.tap do |args|
args in {a: a, b: b} # !!!
p a
end
然而,目前默认情况下,这将显示警告(可以禁用):
Pattern matching is experimental, and the behavior may change in future versions of Ruby!
如果按照您的示例,您已经知道每个哈希中有两个键,为什么不呢?
[{a: 1, b: 2}, {a: 3, b: 4}].each do |h|
a, b = h.values
p a
end
这个:
[{a: 1, b: 2}, {a: 3, b: 4}].each do |a:, b:| p a end
在 Ruby 2.7
中引发以下警告warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
我知道 each
正在将哈希传递给块,并且块现在接受 |a:, b:|
作为命名参数但是,有什么方法可以在这种情况下正确地解构哈希?
我不确定,但我想也许这个想法是使用模式匹配来进行散列解构?例如:
{a: 1, b: 2}.tap do |args|
args in {a: a, b: b} # !!!
p a
end
然而,目前默认情况下,这将显示警告(可以禁用):
Pattern matching is experimental, and the behavior may change in future versions of Ruby!
如果按照您的示例,您已经知道每个哈希中有两个键,为什么不呢?
[{a: 1, b: 2}, {a: 3, b: 4}].each do |h|
a, b = h.values
p a
end