val1 = 1
val2 = "1"
if val1 == val2 #< Question is in this line
end
如何比较数字及其字符串表示?
答案 0 :(得分:30)
将其转换为另一个,所以:
val1.to_s == val2 # returns true
或者:
val1 == val2.to_i # returns true
虽然ruby是dynamically typed(类型在运行时已知),但它也是strongly typed(类型不会隐式地进行类型转换)
答案 1 :(得分:3)
假设您不知道其中任何一个是nil,字母数字字符串还是空字符串,我建议将两边都转换为字符串然后进行比较。
val1.to_str == val2.to_str => true
nil.to_str == "".to_str => true
"ab123".to_str == 123.to_str => false
答案 2 :(得分:0)
这个问题的一个重要补充:
Integer(val1) == Integer(val2)
我来到这里寻找一个简短的解决方案,而不是明确的,但据我所知,这是最安全的方式。
Integer("123a") # ArgumentError: invalid value for Integer(): "123a"
答案 3 :(得分:0)
finishing_moves
gem有一个#same_as
方法,无需进行任何类型转换即可执行比较。
val1 = 1
val2 = "1"
val1.same_as val2
# => True
val2.same_as val1
# => True