ruby函数在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中的数字时,它正确地返回false。然而,在回复中,这些评估结果为真。

这是我在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?

我尝试了repl.it,结果4和9都为false。

无论如何,对代码的两个小改进是:-您可以直接在范围上调用select,而无需在数组中调用它-您可以返回表达式本身的值,而不指定true和false

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

您对测试的输出感到困惑,该输出报告了函数的预期结果和函数的实际结果是正确的(即测试预期的结果(:

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

如果最右边的列包含所有"true"值,则该函数已通过所有测试。

最新更新