我有一个看起来像这样的哈希:
{
:a => "700",
:b => "600",
:c => "500",
:d => "400",
:e => "300",
:f => {
:g => "200",
:h => [
"test"
]
}
}
我的目标是遍历此哈希并返回一个副本,其中所有值都包含在lambda中,类似于:https://github.com/thoughtbot/paperclip/blob/dca87ec5d8038b2d436a75ad6119c8eb67b73e70/spec/paperclip/style_spec.rb#L44
我选择了each_with_object({})
,但我最好能够只包装第一级,所以我试着检查我在周期中遇到另一个哈希(:f
在这种情况下,只有它&# 39; s键的值应该是lambda,除非它们也是一个哈希值)并且对它进行处理,但它变得非常麻烦。
答案 0 :(得分:1)
def hash_values_to_lambda(old_hash)
{}.tap do |new_hash|
old_hash.each do |key, value|
new_hash[key] =
if value.is_a?(Hash)
hash_values_to_lambda(value)
else
lambda { value } # or -> { value } with new syntax
end
end
end
end
如果您愿意,可以使用each_with_object
代替tap
:
old_hash.each_with_object({}) do |(key, value), new_hash|
# everything else remains the same
end