使用范围与时间循环使用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代码中,我不认为这发生了很多(在任何情况下)?

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...