Сравнить число и его строковое представление 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
Ответ 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