Project1

标题: each等方法的提问 [打印本页]

作者: myaa475    时间: 2018-7-7 17:19
标题: each等方法的提问
  我们直接进入主题.

  
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, 下载次数: 22)

3.JPG

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

xg1.JPG

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

xg3.JPG

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

捕获.JPG

作者: 灯笼菜刀王    时间: 2018-7-7 19:18
本帖最后由 灯笼菜刀王 于 2018-7-7 19:20 编辑

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

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

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


作者: clear仔    时间: 2018-7-7 19:38
本帖最后由 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
输出




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1