直到循环 - 为什么它不会立即退出?

时间:2014-11-10 06:03:57

标签: ruby

问题:使用“until”循环中的第一行,我们将boolean(sorted)设置为true。为什么循环甚至在这一行之后运行?另外,为什么我们不能在.times do循环之后放置sorted = true(关闭直到排序的循环)并获得相同的结果?

def bubble_sort(arr)
  len = arr.length
  sorted = false
  until sorted
    sorted = true
    (len-1).times do |i|
      if arr[i] > arr[i+1]
        arr[i],arr[i+1] = arr[i+1],arr[i]
        sorted = false
      end
    end
  end
  arr
end

提前致谢!

1 个答案:

答案 0 :(得分:4)

在循环的每次迭代开始时检查循环条件。循环体内sorted的值无关紧要,重要的是当循环即将开始另一次迭代时sorted的值。循环没有看sorted看它的值何时改变,它只是在每次迭代之前评估sorted并且在它真实时停止循环(即不是false而不是{{1当它被检查时。