Ruby 的重做方法 vs while 循环



我读到这个问题,它让我思考为什么在可以使用重做方法的情况下要使用while循环。我找不出这两者有什么区别。我知道redo方法将重新运行代码块,而while循环将重新运行该代码块,只要条件为true。有人能举一个例子说明你为什么要使用其中一个吗?

redo命令重新启动循环的当前迭代(例如,在不检查while中的终止条件或在for中推进迭代器的情况下),您仍然需要某种描述的循环(例如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在那里提供了循环结构,而redo所做的只是在你得到错误答案的情况下重新启动该循环(而不前进到下一个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

或者在没有CCD_ 10:的CCD_

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

但它们都不如redo解决方案优雅,后者提供了一种更具表现力的控制循环的方式,是对其他语言(如continuebreak)中常见控件的扩展。

相关内容

  • 没有找到相关文章

最新更新