加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:01:55 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 Ruby解决Project Euler问题,我使用4种不同的循环方法,即循环,时间,范围和upto方法,但times方法仅产生预期的答案,而for循环,范围和upto方法没有.我假设他们有点相同,但我发现它不是.有人可以解释这些方法之间的区别吗? 这是我使用的循环结构
我正在尝试使用 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代码中,我不认为这发生了很多(在任何情况下)?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读