gpt4 book ai didi

ruby - Ruby 3 中的哈希解构

转载 作者:行者123 更新时间:2023-12-04 11:09:44 26 4
gpt4 key购买 nike

我 Ruby 2 您可以执行以下操作:

my_hash = {a: {aa: 1, ab: 2, ac: 3}}

my_hash.each do |key, aa:, ab: 4, **|
puts key
puts aa
puts ab
end
在 Ruby 3 中,这现在导致 missing keywords :aa, :ab .在 Ruby 3 中重构这样的代码的最佳方法是什么?
像下面这样的东西不起作用,因为它不支持设置默认值:
my_hash.each do |key, values|
values in {aa: aa, ab: ab}
end
我能想到的最好方法是将现有代码放在包装器中:
lambda = ->(key, aa:, ab: 4, **) do
puts key
puts aa
puts ab
end

my_hash.each do |key, values|
lambda.call(key, **values)
end
还有更好的选择吗?

最佳答案

我想不出将哈希转换为关键字参数的方法。
但是为什么不按原样使用散列,即不将其键视为关键字?除非你的实际代码更复杂, fetch 似乎做你想做的事:

my_hash = {a: {aa: 1, ab: 2, ac: 3}}

my_hash.each do |key, values|
puts key
puts values.fetch(:aa)
puts values.fetch(:ab, 4)
end
以上在 Ruby 2 和 3 中都可以正常工作。就像您的示例一样,如果 :aa 会引发错误缺失,它将使用默认值 4如果 :ab不见了。

关于ruby - Ruby 3 中的哈希解构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67774870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com