Ruby-编写一种识别素数的方法

时间:2018-12-21 01:07:33

标签: ruby

如果整数是质数,则以下方法应返回true,如果不是,则返回false。有人可以向我解释true的位置如何正确吗?我很难理解每个闭包(end)如何关闭每个块以及为什么将true放置在正确的位置。

这是我要完成课程的实验室。我知道代码有效,但是我不确定为什么。

def prime?(value)
  if value <= 1 || value == 0 || value == 1
    return false
  elsif
    (2..value - 1).each do |i|
      if value % i == 0
      return false
    end
  end
end
true  # <= need explanation
end

prime?对于素数整数应返回true,对于非素数整数应返回false

1 个答案:

答案 0 :(得分:2)

我已经重新格式化了这段代码,以使end闭包具有良好的缩进性:

def prime?(value)
  if value <= 1 || value == 0 || value == 1
    return false
  elsif
    (2..value - 1).each do |i|
      if value % i == 0
        return false
      end
    end
  end
  true  # <= need explanation
end

我想您对if部分和elsif及其结尾ture都很困难。

如果没有显式的return,Ruby方法将返回其最后一个表达式的值。这样,当且仅当我们错过了true分支并经过if分支而未激活elsif时,才返回最后一个return false

什么时候会发生?如果value是质数,则当然它会首先落入elsif分支,然后检查每个小于它的数,看是否可以被它们整除。

一旦所有试验失败,elsif分支便会结束,我们将遇到最后一个true表达式。