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