有没有人能给我解释一下为什么会这样
$ 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 > 为什么"10" > "3"返回false?
发布于 2014-04-06 06:08:45
因为在所有这些情况下,都是比较字符串,而不是数字。当字符串被比较时,它是逐个字符地完成的。显然,字符"1"比字符"3"“小”。
发布于 2014-04-06 06:59:32
包含Comparable模块的String类。因此,在每个测试中,您都在执行,实际上调用了Comparable#>方法,而后者又调用了String#<=>方法。
为什么
"10" > "3"返回true?
首先查看文档-如果字符串具有不同的长度,并且字符串在与最短长度进行比较时等于,则较长的字符串被认为比较短的<代码>E219>大一个。
在你的例子中,是的,'10'和'3'是不同大小的。这个相等是由String#eql?执行的。
现在再次考虑示例"10" > '1',它返回true,因为与最短的长度E256<代码>E157长度<代码>E258相比,字符串等于,因此认为<代码>E159较长的字符串E260<代码>E161比<代码>E264<代码>E165短<代码>E266<代码>E167一个。<代码>E268。<>E268>
但是当字符串具有相同的大小时,则使用String#eql?方法逐个字符地进行比较。
https://stackoverflow.com/questions/22887465
复制相似问题