Сравнить число и его строковое представление
val1 = 1
val2 = "1"
if val1 == val2 #< Question is in this line
end
Как сравнить число и его строковое представление?
Ответы
Ответ 1
Преобразуйте либо в другой, либо:
val1.to_s == val2 # returns true
Или:
val1 == val2.to_i # returns true
Хотя ruby динамически типизирован (тип известен во время выполнения), он также строго типизирован (тип не получает неявно typecast)
Ответ 2
Предполагая, что вы не знаете, будет ли один из них ниль, алфавитно-цифровая строка или пустая строка, я предлагаю преобразовать обе стороны в строки и затем сравнить.
val1.to_str == val2.to_str => true
nil.to_str == "".to_str => true
"ab123".to_str == 123.to_str => false
Ответ 3
Важное дополнение к этому вопросу:
Integer(val1) == Integer(val2)
Я пришел сюда, чтобы найти короткое решение, а не как явное, но это насколько я знаю, самый безопасный способ.
Integer("123a") # ArgumentError: invalid value for Integer(): "123a"
Ответ 4
У драгоценного камня finishing_moves
есть метод #same_as
, который выполняет сравнение без необходимости приведения типов.
val1 = 1
val2 = "1"
val1.same_as val2
# => True
val2.same_as val1
# => True
Ответ 5
Попробуйте это
true if Integer(val1) == Integer(val2) rescue false