我正在尝试使用
Ruby解决Project Euler问题,我使用4种不同的循环方法,即循环,时间,范围和upto方法,但times方法仅产生预期的答案,而for循环,范围和upto方法没有.我假设他们有点相同,但我发现它不是.有人可以解释这些方法之间的区别吗?
这是我使用的循环结构
# for-loop method for n in 0..1 puts n end 0 1 => 0..1 # times method 2.times do |n| puts n end 0 1 => 2 # range method (0..1).each do |n| puts n end 0 1 => 0..1 # upto method 0.upto(1) do |n| puts n end 0 1 => 0
解决方法
通过检查文档可以轻松获取此信息.
Array#each
具有array.each {| item |的签名block}→array,所以我们可以看到foo.each {…}的返回值是foo.
同样,Int#upto
有一个int.upto(limit){| i |的签名block} => int,所以x.upto(y){…}将始终返回x.
那么我们也可以看到,由于Integer#times
的签名,所以2.次{…}将返回2.
我无法找到正确的文档,但是对于x中的x …被翻译成y.each do | x | …,所以这就是为什么你的for-in循环返回与你的.each循环相同的事情.