2013-01-07 94 views
1

我有一個關於Ruby循環的非常基本的問題。評估Ruby while循環底部的退出條件

該程序按照書面形式返回第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 

回答

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 
+0

正是我一直在尋找。謝謝! – wils484