Сравните число и его строковое представление - PullRequest
14 голосов
/ 03 августа 2009
val1 = 1
val2 = "1"

if val1 == val2 #< Question is in this line
end

Как сравнить число и его строковое представление?

Ответы [ 4 ]

30 голосов
/ 03 августа 2009

Преобразовать либо в другое, либо либо:

val1.to_s == val2 # returns true

Или:

val1 == val2.to_i # returns true

Хотя ruby ​​ динамически типизирован (тип известен во время выполнения), он также строго типизирован (тип не получает неявно typecast)

3 голосов
/ 03 августа 2009

Предполагая, что вы не знаете, будет ли это ноль, буквенно-цифровая строка или пустая строка, я предлагаю преобразовать обе стороны в строки и затем сравнить.

val1.to_str    == val2.to_str => true
nil.to_str     == "".to_str   => true
"ab123".to_str == 123.to_str  => false
0 голосов
/ 16 сентября 2016

У драгоценного камня finishing_moves есть метод #same_as, который выполняет сравнение без необходимости приведения типов.

val1 = 1
val2 = "1"

val1.same_as val2
# => True

val2.same_as val1
# => True
0 голосов
/ 17 июня 2015

Важное дополнение к этому вопросу:

Integer(val1) == Integer(val2)

Я пришел сюда в поисках краткого решения, не столь явного, но это, насколько я знаю, самый безопасный способ.

Integer("123a") # ArgumentError: invalid value for Integer(): "123a"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...