设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1616|回复: 2
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1315
在线时间
98 小时
注册时间
2018-4-12
帖子
85
跳转到指定楼层
1
发表于 2018-7-7 17:19:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  我们直接进入主题.

  
RUBY 代码复制
  1. puts "如果使用break终止当前循环 "
  2. i = 0
  3. ["Perl", "Python", "Ruby", "Scheme"].each do |lang|
  4. i += 1
  5. if i == 3
  6. break
  7. end
  8. p [i,lang]
  9. end
  10. puts "跳到下一个循环next:"
  11. i = 0
  12. ["Perl", "Python", "Ruby", "Scheme"].each do |lang|
  13. i += 1
  14. if i == 3
  15. next
  16. end
  17. p [i,lang]
  18. end
  19. puts "redo是再执行一次上边的跳过下面的:"
  20. i = 0
  21. ["Perl", "Python", "Ruby", "Scheme"].each do |lang|
  22. i += 1
  23. if i == 3
  24. redo
  25. end
  26. p [i,lang]
  27. end
  28. exit
  29. =begin
  30. 第一次应该是1,perl. 2,python
  31. 第二次应该是1,perl 2,python,
  32. 第三次应该是1,perl 2,python, 4,scheme
  33.  
  34. 然额,实际却是
  35. [1, "Perl"]
  36. [2, "Python"]
  37.  
  38. [1, "Perl"]
  39. [2, "Python"]
  40. [4, "Scheme"]
  41.  
  42. [1, "Perl"]
  43. [2, "Python"]
  44. [4, "Ruby"]
  45. [5, "Scheme"]
  46. =end



   先从第二次说起吧!在执行了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 (55.88 KB, 下载次数: 4)

3.JPG

xg1.JPG (13.77 KB, 下载次数: 3)

xg1.JPG

xg3.JPG (15.14 KB, 下载次数: 3)

xg3.JPG

捕获.JPG (53.48 KB, 下载次数: 2)

捕获.JPG
编程 音乐 美工...先从编程下手吧XD.

Lv5.捕梦者

梦石
0
星屑
37784
在线时间
5396 小时
注册时间
2006-11-10
帖子
6546
2
发表于 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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
3
发表于 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 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-24 17:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表