如何实现这一输出?

时间:2015-02-10 10:46:32

标签: ruby

我是Ruby新手。 我在阅读教程时发现了这段代码

10.times { |i | print i, " " } # o/p => 0 1 2 3 4 5 6 7 8 9  

我知道时间会重复一次动作的次数。 我假设我初始化为0。 但是,它是如何增加的?

3 个答案:

答案 0 :(得分:2)

times创建一个递增数字的数组(实际上是一个Enumerator,但它可以转换为带to_a的数组)

$ irb
irb(main):001:0> 3.times.to_a
=> [0, 1, 2]
irb(main):002:0> 10.times.to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

请参阅:http://www.ruby-doc.org/core-2.2.0/Integer.html#method-i-times

each是一个数组/枚举器方法,yields每个元素。

请参阅:
http://www.ruby-doc.org/core-2.2.0/Array.html#method-i-each
http://www.ruby-doc.org/core-2.0.0/Enumerator.html#method-i-each

答案 1 :(得分:2)

  

我假设我被初始化为0.但是,它是如何增加的?

有一个内部变量,整数本身并没有改变。让我们使用基本的times循环实现我们自己的while方法:

class Integer
  def my_times
    i = 0            # initialize to 0
    while i < self   # self is the integer object, i.e. 10
      yield i        # pass i to the block
      i += 1         # increment i
    end
  end
end

用法:

10.my_times { |i| print i, " " } #=> 0 1 2 3 4 5 6 7 8 9

Ruby方法更复杂(返回没有块的枚举器),但是你明白了。

答案 2 :(得分:1)

在Ruby中,一切都是对象,包括数字。整数是对象,意思是,它们是从包含方法的 Integer类定义的。可以在对象的实例上调用这些方法。因此,数字10 Integer 类的实例对象,您可以在其上调用方法。

其中一种方法是。当你这样做时:

10.times ...

您正在对象 times上调用10 方法。此方法接受块参数{...}

10.times { |i| puts i }

此处,i的参数,times方法内部有一个循环,该参数将该参数从0运行到对象整数你打电话给方法。

正如@MarekLipka在评论中所说,请参阅Ruby Integer课程的文档。