使用范围与时间循环使用Ruby中的差异

前端之家收集整理的这篇文章主要介绍了使用范围与时间循环使用Ruby中的差异前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 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循环相同的事情.

无论如何,取决于这些循环结构的返回值是一种奇怪的方法.在惯用的Ruby代码中,我不认为这发生了很多(在任何情况下)?

猜你在找的Ruby相关文章