我有一个关于Ruby返回值的问题,这使我感到困惑。
我编写了一个方法,该方法将数组作为参数并将其格式化为列表,如下所示:
def list(array)
array.each { |name, age| puts name + " is #{age} years old" }
end
假设数组为[["Amy", 6], ["Tabitha", 5], ["Marcus", 9]]
。
我希望此列表方法返回do / end块中的字符串,而不返回数组。但是,返回值始终是一个数组。
我尝试将块分配给变量并返回该变量,但是它不起作用。我还尝试用return替换puts
,但是在第一次迭代后退出该方法。似乎无法解决问题所在?
很抱歉,如果这是一个非常愚蠢的问题-我以前从未遇到过。
非常感谢任何输入,谢谢! :)
答案 0 :(得分:6)
您想要map
,而不是each
。 map
与each
相似,只是它返回每个块评估的结果。 each
返回原始数组。
另外,您的主要错误是puts
显示控制台中的某些内容,
您的最终代码为:
def list(array)
array.map { |name, age| "#{name} is #{age} years old" }
end
答案 1 :(得分:0)
列表each
的返回值。该函数返回该列表,因为它是最后一个可返回的指令。您需要通过以下方式使用map
方法:
def how_old(people)
people.map { |name, age| "#{name} is #{age} years old" }
end