这一点:
[{a: 1, b: 2}, {a: 3, b: 4}].each do |a:, b:| p a end
在Ruby 2.7中引发以下警告警告:不推荐使用最后一个参数作为关键字参数;也许应该在呼叫中添加**我知道each正在向块传递一个哈希值,并且块现在接受|a:, b:|作为命名参数,但是,有没有办法在这种上下文中正确地解构哈希值?
each
|a:, b:|
5t7ly7z51#
我不确定,但我想也许这个想法是使用模式匹配进行散列解构?例如:
{a: 1, b: 2}.tap do |args| args in {a: a, b: b} # !!! p a end
但是,当前默认情况下,这将显示警告(可以禁用):模式匹配是实验性的,在Ruby的未来版本中,这种行为可能会改变!
ws51t4hk2#
如果你已经知道每个Hash中有两个键,为什么不这样做呢?
[{a: 1, b: 2}, {a: 3, b: 4}].each do |h| a, b = h.values p a end
voase2hg3#
在Ruby 3中,可以使用向右赋值运算符=>:
=>
{a: 1, b: 2}.tap do |args| args => { a:, b: } p a end
3条答案
按热度按时间5t7ly7z51#
我不确定,但我想也许这个想法是使用模式匹配进行散列解构?例如:
但是,当前默认情况下,这将显示警告(可以禁用):
模式匹配是实验性的,在Ruby的未来版本中,这种行为可能会改变!
ws51t4hk2#
如果你已经知道每个Hash中有两个键,为什么不这样做呢?
voase2hg3#
在Ruby 3中,可以使用向右赋值运算符
=>
: