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

093gszye  于 2022-11-22  发布在  Ruby
关注(0)|答案(3)|浏览(163)

这一点:

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

在Ruby 2.7中引发以下警告
警告:不推荐使用最后一个参数作为关键字参数;也许应该在呼叫中添加**
我知道each正在向块传递一个哈希值,并且块现在接受|a:, b:|作为命名参数,但是,有没有办法在这种上下文中正确地解构哈希值?

5t7ly7z5

5t7ly7z51#

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

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

但是,当前默认情况下,这将显示警告(可以禁用):
模式匹配是实验性的,在Ruby的未来版本中,这种行为可能会改变!

ws51t4hk

ws51t4hk2#

如果你已经知道每个Hash中有两个键,为什么不这样做呢?

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

voase2hg3#

在Ruby 3中,可以使用向右赋值运算符=>

{a: 1, b: 2}.tap do |args|
  args => { a:, b: }
  p a
end

相关问题