在 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