0

Can someone please explain me why this can be happening

$ irb
2.1.1 :001 > "9" > "3"
 => true 
2.1.1 :002 > "10" > "3"
 => false 
2.1.1 :005 > "2.3" > "2.1"
 => true
2.1.1 :003 > 

Why is "10" > "3" returning false ?

4

2 回答 2

1

因为在所有这些情况下,比较的是字符串,而不是数字。当比较字符串时,它是逐个字符完成的。显然, character"1"比 character 'less' "3"

于 2014-04-05T22:08:44.923 回答
0

String类包含Comparable模块。因此,在每个测试中,您都在执行实际调用Comparable#>方法,而方法又调用String#<=>方法。

为什么"10" > "3"退货true

首先查看文档-如果字符串的长度不同,并且与最短长度相比,字符串相等,则认为较长的字符串大于较短的字符串。

现在在你的情况下,是的,'10'并且'3'不同的 size。但是与最短的长度相比,字符串并不相等,因此较长的字符串不被认为大于较短的字符串。这意味着1来自较长的字符串,不等于'3'来自最短的字符串。这个相等是由 执行的String#eql?

现在再次考虑该示例"10" > '1',它返回true,因为与最短长度相比,字符串相等,因此较长的字符串被认为大于较短的字符串。

但是当字符串大小相等时,使用方法逐个字符进行比较。String#eql?

于 2014-04-05T22:59:32.273 回答