我是Ruby新手。 我在阅读教程时发现了这段代码
10.times { |i | print i, " " } # o/p => 0 1 2 3 4 5 6 7 8 9
我知道时间会重复一次动作的次数。 我假设我初始化为0。 但是,它是如何增加的?
答案 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课程的文档。