Kyl*_*tan 1 ruby arrays idioms
我有一个数组数组,如下所示:
fruits_and_calories = [
["apple", 100],
["banana", 200],
["kumquat", 225],
["orange", 90]
]
Run Code Online (Sandbox Code Playgroud)
我还有一个我想在数组的每个元素上调用的方法:
fruits_and_calories.each do |f| eat(f[0], f[1])
Run Code Online (Sandbox Code Playgroud)
我真的希望能说出类似的话:
fruits_and_calories.each do |f| eat(f[:name], f[:calories])
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在不必更改数组中的每个项目的情况下将其拉出来(例如,通过迭代它并以某种方式添加符号)?或者,如果这太难了,还有更好的选择吗?
最好的答案是根本不使用数组,而是使用哈希:
fruits_and_calories = { :apple => 100,
:banana => 200,
:kumquat => 225,
:orange => 90}
fruits_and_calories.each do |name, calories|
eat(name, calories)
end
Run Code Online (Sandbox Code Playgroud)
在根本不改变数据结构的情况下,您可以更改块参数以实现相同的目的:
fruits_and_calories.each do |name, calories| eat(name, calories); end
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为Ruby会将内部数组(["apple",100]等)自动扩展到块的参数列表中('do | name,calories | ... end').这是Ruby从Lisp继承的技巧,称为"解构参数".