首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby大于operand的奇怪行为

Ruby大于operand的奇怪行为
EN

Stack Overflow用户
提问于 2014-04-06 06:06:19
回答 2查看 66关注 0票数 0

有没有人能给我解释一下为什么会这样

代码语言:javascript
复制
$ 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?

EN

回答 2

Stack Overflow用户

发布于 2014-04-06 06:08:45

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

票数 1
EN

Stack Overflow用户

发布于 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?方法逐个字符地进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22887465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档