评估Ruby while循环底部的退出条件

时间:2013-01-07 19:12:43

标签: ruby

我有一个关于Ruby循环的基本问题。

该程序以书面形式返回第i个素数+1(即该示例应返回17)。我知道我可以简单地返回cand-1,但我想知道检查在while循环底部是否找到答案的“Ruby方式”是什么,只有在没有的情况下才会递增。

def ith_prime(i)
  pI = 0 # primes index
  divs = []
  cand = 2

  until pI == i do 
    if divs.find { |div| cand%div == 0 } == nil
        divs << cand
        pI += 1
    end
    cand += 1
  end
  cand
end

puts ith_prime(7)
> 18

1 个答案:

答案 0 :(得分:5)

我大部分时间都使用loop代替whileuntil。这样我可以将退出条件放在循环中的任何位置。

我会这样写(如果我理解正确的话):

def ith_prime(i)
  pI = 0 # primes index
  divs = []
  cand = 2

  loop do
    unless divs.find { |div| cand%div == 0 }
      divs << cand
      pI += 1
    end

    break if pI == i

    cand += 1
  end

  cand
end