比较数字及其字符串表示

Mik*_*liy 15 ruby string comparison

val1 = 1
val2 = "1"

if val1 == val2 #< Question is in this line
end
Run Code Online (Sandbox Code Playgroud)

如何比较数字及其字符串表示?

Sin*_*our 30

转换为另一个,所以:

val1.to_s == val2 # returns true
Run Code Online (Sandbox Code Playgroud)

要么:

val1 == val2.to_i # returns true
Run Code Online (Sandbox Code Playgroud)

尽管ruby是动态类型的(类型在运行时已知),但它也是强类型的(类型不会隐式地进行类型转换)

  • 我会使用第一个建议(将整数更改为字符串),因为如果使用to_i将类似"9abc"的字符串转换为整数,则会返回整数9,这可能不合适,并可能导致错误如果不是意图. (7认同)

Aar*_*tad 5

假设您不知道其中任何一个是 nil、字母数字字符串或空字符串,我建议将两边都转换为字符串然后进行比较。

val1.to_str    == val2.to_str => true
nil.to_str     == "".to_str   => true
"ab123".to_str == 123.to_str  => false
Run Code Online (Sandbox Code Playgroud)