为什么我的代码会返回接收器?

时间:2017-08-29 07:15:40

标签: ruby

我正在自己实施each方法。我应该在关闭方法之前显式返回self。这是我的代码:

module Enumerable 
  def my_each
    for i in self
      yield i
    end
    #self
  end
end

[1,2,3,4].my_each {|x| x + 1} # => [1,2,3,4]

为什么代码仍会返回接收者,即使我没有在最后一行显式返回self

1 个答案:

答案 0 :(得分:3)

  

为什么代码仍然返回自我,即使我没有在最后一行显式返回自我?

如果您未明确指定返回值,则方法将返回已计算的最后一个表达式。方法中的最后一个表达式是for循环。

来自documentation

  

for循环的结果值是迭代的值,除非使用break

示例:

for i in 1..10
end
#=> 1..10

for i in [1, 2, 3]
end
#=> [1, 2, 3]

for i in [1, 2, 3]
  break :foo
end
#=> :foo