each_with_index块中的内容是什么

时间:2014-02-24 01:40:15

标签: ruby block

好的,所以我正在阅读ruby的指南,我无法理解这段代码。我是从哪里来的我看到n被传递来遍历块,但我不知道我来自哪里。如果我能得到一个完整的解释和这个代码如何工作的细分那将是伟大的!

class Array
  def iterate!
    self.each_with_index do |n, i|
      self[i] = yield(n)
    end
  end
end

array = [1, 2, 3, 4]

array.iterate! do |n|
  n ** 2
end

3 个答案:

答案 0 :(得分:3)

i是元素的索引(因此名称为each_with_index)。

答案 1 :(得分:2)

使用代码块调用的一些方法会将多个值传递给块,因此最终会出现多个块参数(在您的情况下,块参数为n和i,它将保存数组中的当前项) (n)及其指数(i))。

通过查看方法的文档(here's the docs for each_with_index),可以找出块传递的参数数量。它确实看起来像额外的值一开始就无处可去,并且需要一点时间来记住在调用不同方法时块将被传递的内容。

答案 2 :(得分:0)

i通常用作所谓的“迭代变量”。基本上,您在此处复制的循环块将遍历循环的每个“迭代”并使用新值i并将其分配给变量n,然后将其传递给操作在倒数第二行。在这种情况下,新值只是array中的下一个数字,因此循环有四次迭代。