我想仅使用块参数来构造嵌套数据结构。
数据(本例简化)如下:
response = [
["James", { species: "cat", age: "4" }],
["Sandy", { species: "dog", age: "7" }],
["Horse", { species: "man", age: "34" }]
]
我只能使用块参数找不到有效解构的语法。我想象可能是这样,将嵌套数组解构样式与命名关键字参数结合起来:
response.map do |name, (species:, age:)|
"#{name}: #{species}, #{age}"
end
但是这会产生语法错误。
显然,有很多其他方法可以提取必要的数据,例如使用非嵌套关键字参数:
response.map do |name, data|
proc { |species:, age:|
"#{name}: #{species}, #{age}"
}.(data)
end
或
response.map do |name, data|
species, age = data.values_at(:species, :age)
"#{name}: #{species}, #{age}"
end
或非常明显的
response.map do |name, data|
"#{name}: #{data[:species]}, #{data[:age]}"
end
但是我喜欢在块参数中使用它,因为它吸引了我对优雅代码的感觉。有什么想法吗?
答案 0 :(得分:3)
|name, species:, age:|
有效(因为处理关键字参数的方式)。它显然不适用于一般情况,但由于关键字参数的工作方式,最后一个元素是散列的数组干净地对应于参数列表。