val1 = 1
val2 = "1"
if val1 == val2 #< Question is in this line
end
Как сравнить номер и его строковое представление?Сравнить номер и его строковое представление
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
Хотя рубин dynamically typed (тип известен во время выполнения), это также strongly typed (тип Безразлично 't получить неявно typecast)
Предполагая, что вы не знаете, будет ли один из них ниль, алфавитно-цифровая строка или пустая строка, я предлагаю преобразовать обе стороны в строки и d, затем сравнивая.
val1.to_str == val2.to_str => true
nil.to_str == "".to_str => true
"ab123".to_str == 123.to_str => false
Важное дополнение к этому вопросу:
Integer(val1) == Integer(val2)
Я приехал сюда в поисках короткого решения, а не как явное, но это, насколько я знаю, самый безопасный способ.
Integer("123a") # ArgumentError: invalid value for Integer(): "123a"
Будьте осторожны! Если вы не укажете radix, строки, начинающиеся с «0», будут интерпретироваться в восьмеричном! https://ruby-doc.org/core-2.2.3/Kernel.html#method-i-Integer –
finishing_moves
камень имеет #same_as
метод, который выполняет сравнение без необходимости делать какие-либо типажей.
val1 = 1
val2 = "1"
val1.same_as val2
# => True
val2.same_as val1
# => True
Я бы с первым предложением (изменение целого числа в строку), потому что если вы преобразовать строку как «9abc» в целое число с помощью to_i, вы получаете назад целое число 9, что может оказаться неприемлемым, и, возможно, привести к ошибкам, если это не намерение. – ehsanul