9

这:

[{a: 1, b: 2}, {a: 3, b: 4}].each do |a:, b:| p a end

在 Ruby 2.7 中引发以下警告

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

我知道这each是将哈希传递给块,并且块现在接受|a:, b:|命名参数但是,有没有办法在这种情况下正确解构哈希?

4

2 回答 2

3

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

{a: 1, b: 2}.tap do |args|
  args in {a: a, b: b} # !!!
  p a
end

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

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

于 2020-06-04T09:20:15.930 回答
0

如果您已经知道根据您的示例在每个 Hash 中有两个键,为什么不这样做呢?

[{a: 1, b: 2}, {a: 3, b: 4}].each do |h|
  a, b = h.values
  p a
end
于 2020-06-04T09:26:11.120 回答