2009-08-02 31 views

回答

28

转换或者到其他,所以无论是:

val1.to_s == val2 # returns true 

或者:

val1 == val2.to_i # returns true 

虽然红宝石是dynamically typed(类型是在运行时已知的),它也是strongly typed(类型没有按没有得到隐式的类型转换)

+6

我会第一建议(改变整数字符串)去,因为如果转换一个字符串,如“9ABC”使用to_i整数,您将得到回整数9,这可能不合适,如果不是这个意图,可能会导致错误。 – ehsanul 2009-08-02 23:19:32

3

假设你不知道其中一个是否为零,一个字母数字字符串或一个空字符串,我建议将两边转换为字符串然后比较。

val1.to_str == val2.to_str => true 
nil.to_str  == "".to_str => true 
"ab123".to_str == 123.to_str => false 
0

一个重要的除了这个问题:

Integer(val1) == Integer(val2) 

我来到这里寻找一个简短的解决方案,而不是明确的,但是这是因为据我所知,最安全的方式。

Integer("123a") # ArgumentError: invalid value for Integer(): "123a" 
+1

小心!如果您不指定基数,那么以“0”开头的字符串将被解释为八进制! https://ruby-doc.org/core-2.2.3/Kernel.html#method-i-Integer – 2016-11-10 18:28:36

0

finishing_moves宝石具有#same_as方法,该方法无需做任何类型转换执行比较。

val1 = 1 
val2 = "1" 

val1.same_as val2 
# => True 

val2.same_as val1 
# => True 
0

试试这个

true if Integer(val1) == Integer(val2) rescue false 
+1

这是做什么的?它是如何解决问题的? – Adam 2017-04-18 15:02:50