【问题标题】:Ruby greater than operand weird behaviour [duplicate]Ruby大于操作数的奇怪行为[重复]
【发布时间】:2014-05-18 05:21:19
【问题描述】:

谁能解释一下为什么会发生这种情况

$ 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 ?

【问题讨论】:

    标签: ruby ruby-2.1


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      为什么"10" > "3" 返回true

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

      现在,在您的情况下,是的,'10''3' 的大小不同。但是最短长度相比,字符串不相等,因此更长的字符串不被认为更大 em> 比 一个。 表示较长字符串中的1,不等于最短字符串中的'3'。这个相等是由String#eql? 执行的。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多