我是Ruby新手。 我发现这个代码,同时阅读教程这个输出是如何实现的?
10.times { |i | print i, " " } # o/p => 0 1 2 3 4 5 6 7 8 9
我知道次重复的次数行为的数目,它被称为。 我假设我被初始化为0. 但是,它是如何递增的?
我是Ruby新手。 我发现这个代码,同时阅读教程这个输出是如何实现的?
10.times { |i | print i, " " } # o/p => 0 1 2 3 4 5 6 7 8 9
我知道次重复的次数行为的数目,它被称为。 我假设我被初始化为0. 但是,它是如何递增的?
我假设我被初始化为0.但是,它是如何递增的?
有一个内部变量,整数本身不会改变。让我们使用基本while
循环实现我们自己的times
方法:
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的方法比较复杂(返回无块一个枚举),但你的想法。
times
创建递增的数字的阵列(以及一个枚举实际上,但是它可以被转换为与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
是Array /枚举方法,该方法每个元素均为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
Nitpicking,但它不创建数组('to_a'),它只是将每个数字传递给块。只有在没有给出块的情况下才返回枚举器。 – Stefan 2015-02-10 11:37:34
在Ruby中,一切都是对象,包括数字。整数是对象,也就是说,它们是从包含方法的Integer类定义的。这些方法可以在对象的实例上调用。因此,数字10
是整数类的实例对象,您可以调用它的方法。
其中一种方法是次。当你这样做:
10.times ...
您的对象10
上调用times
方法。该方法接受一个块参数{...}
:
10.times { |i| puts i }
这里,i
对于块参数并在内部的times
方法具有将运行参数从0
到您呼叫的倍对象整数的环方法。
正如@MarekLipka在评论中所说,请参阅Ruby Integer类的文档。
'times'方法进行递增。 'times'是整数对象的一种方法,在这里是'10',它接受一个块作为参数('{...}'部分),它在一个循环内执行。 – lurker 2015-02-10 10:48:47
感谢您的回复。但是,我需要另一个澄清。如果times是一个整数对象,并且每次都会增加3.times {puts“Hi!”}。打印嗨!嗨!喜? – Rocky29 2015-02-10 10:50:16
为什么不检查'时间'方法来源: http://www.ruby-doc.org/core-2.2.0/Integer.html#method-i-times – 2015-02-10 10:51:34