为什么以下方法不返回字符串的长度,而是返回字符串?
def length_finder(input_array)
lengths = []
input_array.each do |string|
lengths << string.length
end
end
>> array = %w{ lol testtest l}
=> ["lol", "testtest", "l"]
>> length_finder(array)
=> ["lol", "testtest", "l"]
我期待看到的内容:
>> length_finder(array)
=> [3, 8, 1]
这是来自rubymonk.com
的练习答案 0 :(得分:0)
因为each
返回接收器input_array
,这是一个字符串数组。
答案 1 :(得分:0)
试试这段代码。
def length_finder(input_array)
lengths = []
input_array.each do |string|
lengths << string.length
end
return lengths
end
您需要编写'return length',因为Ruby方法返回最后一次计算的表达式。
map方法返回已编辑的数组。下面的代码更简单。
def length_finder(input_array)
input_array.map {|item| item.length}
end
答案 2 :(得分:0)
以“input_array.each”开头的行上的缩进表示“end”语句与.each方法绑定在一起。因为它是在较小缩进的范围中定义的,所以长度仍由最缩进的行填充
lengths << string.length
但是,Ruby解析器认为函数的最后一行是return语句:“end”是指.each方法,它返回一个字符串数组。
即使length []数组现在完全符合您的要求, last 行也需要直接引用您要返回的变量。 “结束”是指您想要返回的对象 行。