Ruby"每个"方法

时间:2014-08-12 05:02:19

标签: ruby arrays iterator

为什么以下方法不返回字符串的长度,而是返回字符串?

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

的练习

3 个答案:

答案 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 行也需要直接引用您要返回的变量。 “结束”是指您想要返回的对象 行。