2016-08-07 7 views
0

я написал следующую функцию, чтобы проверить, является ли число простым:функция рубин возвращает другое логическое значение в IRB против 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

Ваш реплика работает должным образом. Несмотря на то, что 4 и 9 оценивают значение true, это потому, что вы проверяете, что они ложные. false == false is true – 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 

Если крайний правый столбец содержит все «истинные» значения, то функция прошло все его испытания.