#ruby #conditional-statements
#ruby #условные операторы
Вопрос:
У меня есть этот (я полагаю) простой и простой метод, предназначенный для проверки, содержит ли определенная строка только числа и не является пустой.
class String
def is_number?
puts "Here it's working, 1"
if self.scan(/D/).empty? and self != ""
return true
puts "true"
else
return false
puts "false"
end
puts "Here it's working, 2"
end
end
"asd".is_number?
puts "Here it's working, 3"
Результат для меня довольно удивительный:
Метод работает до тех пор, пока не будет выполнено условие. На этом этапе он не соответствует параметрам «тогда» или «еще» (которые до сегодняшнего дня я тоже никогда не считал опцией), а вместо этого прерывает метод. Затем он переходит к следующей команде. Наконец, в конце программы он остается там без каких-либо ошибок.
Я, честно говоря, не знаю, как поступить на этом этапе.
Ответ №1:
Когда вы используете return
метод, он не будет выполнять какой-либо код после этого, если вы ожидаете true
/ false
для печати, вы должны поместить его над return
оператором
def is_number?
puts "Here it's working, 1"
if self.scan(/D/).empty? and self != ""
puts "true"
return true
else
puts "false"
return false
end
puts "Here it's working, 2"
end
Примечание: — "Here it's working, 2"
оператор никогда не будет выполняться, так как перед этим будет return
оператор.
Ответ №2:
он не соответствует параметрам «тогда» или «еще»
Нет, это не то, что здесь происходит, как описано в ответе от Salil.
На будущее, если вы формулируете гипотезу о своем коде, вы должны доказать или опровергнуть ее. Не для нас, для себя. Иначе откуда вы знаете, что это на самом деле происходит?
Например, что-то вроде этого надежно подтвердило бы, что элемент управления действительно входит в одну из условных ветвей.
if self.scan(/D/).empty? and self != ""
#return true
#puts "true"
raise "error from if branch"
else
#return false
#puts "false"
raise "error from else branch"
end