Ruby - написание метода для определения простых чисел - PullRequest
0 голосов
/ 21 декабря 2018

Приведенный ниже метод должен возвращать 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 голосов
/ 21 декабря 2018

Я переформатировал этот код, чтобы сделать закрытие 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.

Методы Ruby будут возвращать значение своего последнего выражения, если нет явного return.Так что последний true будет возвращен тогда и только тогда, когда мы пропустили ветку if и прошли через ветвь elsif без активации return false.

Когда это произойдетслучиться?Если value - простое число, конечно, оно сначала попадет в ветвь elsif, затем проверьте каждое число меньше его, посмотрите, делится ли оно на какое-либо из них.

Как только все испытания не пройдут,elsif ветвь заканчивается, мы встретим последнее true выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...