2016-08-07 106 views
0

返回不同的布爾值我已經寫以下函數來檢查一個數是否爲素數:紅寶石功能在IRB VS repl.it

def is_prime?(number) 
    arr = (2..number).to_a.select {|m| number % m == 0} 
    arr.length == 1 ? true : false 
end 

當通過4或9在IRB的數目,它正確返回假。但是,在repl.it這些評估爲真。

這裏是測試代碼,我在repl.it運行:

puts("\nTests for #is_prime?") 
puts("===============================================") 
puts('is_prime?(2) == true: ' + (is_prime?(2) == true).to_s) 
puts('is_prime?(3) == true: ' + (is_prime?(3) == true).to_s) 
puts('is_prime?(4) == false: ' + (is_prime?(4) == false).to_s) 
puts('is_prime?(9) == false: ' + (is_prime?(9) == false).to_s) 
puts("===============================================") 

,其輸出:

Tests for #is_prime? 
=============================================== 
is_prime?(2) == true: true 
is_prime?(3) == true: true 
is_prime?(4) == false: true 
is_prime?(9) == false: true 
=============================================== 
What could be causing this variation? 
+0

你能「分享」你的repl.it會話嗎?這是我所看到的。 https://repl.it/Ck9M/0 – kcdragon

+0

以下是我的repl.it會話的鏈接: https://repl.it/Br7y/452 – John

+0

您的repl按預期工作。即使4和9評估爲真,那是因爲你檢查他們是錯誤的。 false == false是真的 – kcdragon

回答

2

我試着repl.it和我假兩個4和9

無論如何,你的代碼有兩點小小的改進: - 你可以直接調用select的範圍,而不用把它放在數組中 - 你可以返回表達式的值本身,而不指定真假

def is_prime?(number) 
    arr = (2..number).select {|m| number % m == 0} 
    arr.length == 1 
end 
0

您已經通過測試的輸出,這是報告這兩個函數的預期結果混淆,以及功能的alctual結果是正確的(即是測試所預期的):

is_prime?(2) == true: true 
is_prime?(3) == true: true 
is_prime?(4) == false: true 
is_prime?(9) == false: true 
       ^ ^
        |  | 
        |  true if the test passed; false if failed 
        | 
        What the function should have returned 

如果最右邊一列包含了所有「真」值,則該功能已通過所有的測試。