查看: 2097|回复: 2

[已经解决] each等方法的提问

[复制链接]
梦石
0
星屑
1315
在线时间
98 小时
注册时间
2018-4-12
回帖
57
发表于 2018-7-7 17:19:43 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
  我们直接进入主题.

  [pre lang="ruby"] puts "如果使用break终止当前循环 "
i = 0
["Perl", "Python", "Ruby", "Scheme"].each do |lang|
i += 1
if i == 3
break
end
p [i,lang]
end
puts "跳到下一个循环next:"
i = 0
["Perl", "Python", "Ruby", "Scheme"].each do |lang|
i += 1
if i == 3
next
end
p [i,lang]
end
puts "redo是再执行一次上边的跳过下面的:"
i = 0
["Perl", "Python", "Ruby", "Scheme"].each do |lang|
i += 1
if i == 3
redo
end
p [i,lang]
end
exit
=begin
第一次应该是1,perl. 2,python
第二次应该是1,perl 2,python,
第三次应该是1,perl 2,python, 4,scheme

然额,实际却是
[1, "Perl"]
[2, "Python"]

[1, "Perl"]
[2, "Python"]
[4, "Scheme"]

[1, "Perl"]
[2, "Python"]
[4, "Ruby"]
[5, "Scheme"]
=end
[/pre]


   先从第二次说起吧!在执行了next后,理论上该跳过下面的,从redo这块地方执行了,可明显又执行一遍,明明都跳到了redo好不好!

   然后第三次啊,这一共也就1,2,3,4个文本好不好?但是却多出了行[5.Scheme] 而且[4.Scheme]变成了4.[ruby],4.[ruby]我们先不忙谈,那个5又是从哪里来的啊?
redo也把 ["Perl", "Python", "Ruby", "Scheme"].each do |lang|执行了一遍,然后就应该停止了啊???难道说redo只对上面一行的代码起作用?
3.JPG
xg1.JPG
xg3.JPG
捕获.JPG
编程 音乐 美工...先从编程下手吧XD.
梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2018-7-7 19:18:47 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2018-7-7 19:20 编辑

next是跳过这次循环, 然后进行下次循环.  就等于你数组里第三次循环是直接跳过了, 所以结果就不显示 3和数组第三位的字符串.

redo是重新执行这个循环的该次迭代,无视循环条件.   就等于循环到数组第三位的时候(i=3), 它又再次执行一次(i+1), 然后这次因为i不等于3, 就跳过这个条件执行下面的结果, 于是输出 4和数组第三位字符串.

如果你的条件是 i>3, 那循环到最后一个单位的时候,  i一直满足条件, 就会一直执行redo, 无限循环了

评分

参与人数 2星屑 +15 赞 +1 收起 理由
guoxiaomi + 15 认可答案
myaa475 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
回帖
146
发表于 2018-7-7 19:38:17 | 显示全部楼层
本帖最后由 clear仔 于 2018-7-7 19:41 编辑

没有毛病。
你的next和break仅仅只是在i==3的时候会执行,each do语法相当于是for(foreach)这个数组
这里自己定义的i并不仅仅是角标+1

对于第一种:
i=0
lang = perl
i=1
输出
lang = py
i = 2
输出
lang = ruby
i = 3
中断循环

对于第二种:
i=0
lang = perl
i=1
输出
lang = py
i = 2
输出
lang = ruby
i = 3
`next`
lang = scheme
i = 4
输出

对于第三种:
i=0
lang = perl
i=1
输出
lang = py
i=2
输出
lang = ruby
i=3
`redo`
lang = ruby
i=4
输出
lang = scheme
i = 5
输出

评分

参与人数 1星屑 +15 收起 理由
guoxiaomi + 15 塞糖

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部