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

Ruby的重做方法与while循环

发布时间:2020-12-16 21:04:54 所属栏目:百科 来源:网络整理
导读:我正在阅读 this question,它让我想到为什么人们会想要使用while循环时可以使用重做方法.我发现两者之间没有任何区别.我知道redo方法将重新运行代码块,并且while循环将重新运行代码块,只要条件为真.有人可以举例说明你为什么要使用其中一种吗? 解决方法 重
我正在阅读 this question,它让我想到为什么人们会想要使用while循环时可以使用重做方法.我发现两者之间没有任何区别.我知道redo方法将重新运行代码块,并且while循环将重新运行代码块,只要条件为真.有人可以举例说明你为什么要使用其中一种吗?

解决方法

重做命令重新启动循环的当前迭代(例如,在没有检查终止条件的情况下或者为迭代器提前),你仍然需要一些描述的循环(例如while循环).

您链接到的答案证明了这一点,其中包含:

nums = Array.new(5){[rand(1..9),rand(1..9)]}
nums.each do |num1,num2|
  print "What is #{num1} + #{num2}: "
  redo unless gets.to_i == num1 + num2
end

.each在那里提供了循环结构,如果得到错误的答案,重做的所有操作都是重启那个循环(没有前进到下一个nums元素).

现在你可以在那里使用while循环作为控制循环,只有在你正确的情况下才进入下一个循环:

nums = Array.new(5){[rand(1..9),rand(1..9)]}
index = 0
while index < 6 do
    num1 = nums[index][0]
    num2 = nums[index][1]
    print "What is #{num1} + #{num2}: "
    if gets.to_i == num1 + num2 then
        index = index + 1
    end
end

或者在没有重做的.each内:

nums = Array.new(5){[rand(1..9),num2|
    answer = num1 + num2 + 1
    while answer != num1 + num2 do
        print "What is #{num1} + #{num2}: "
        answer = gets.to_i
    end
end

但它们都没有redo解决方案那么优雅,它提供了一种更具表现力的控制循环方式,是你在其他语言中看到的常用控件的扩展,例如continue或break.

(编辑:李大同)

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

    推荐文章
      热点阅读