在 Ruby 2.7 中解构块参数中的哈希

Dan*_*iel 8 ruby ruby-2.7

这个:

[{a: 1, b: 2}, {a: 3, b: 4}].each do |a:, b:| p a end
Run Code Online (Sandbox Code Playgroud)

在 Ruby 2.7 中引发以下警告

警告:不推荐使用最后一个参数作为关键字参数;也许 ** 应该添加到通话中

我知道这each是将散列传递给块,并且块现在接受|a:, b:|作为命名参数但是,有什么方法可以在这种情况下正确解构散列?

Tom*_*ord 5

我不确定,但我认为也许这个想法是使用模式匹配进行哈希解构?例如:

{a: 1, b: 2}.tap do |args|
  args in {a: a, b: b} # !!!
  p a
end
Run Code Online (Sandbox Code Playgroud)

然而,目前默认情况下,这将显示一条警告(可以禁用):

模式匹配是实验性的,其行为可能会在 Ruby 的未来版本中发生变化!