使用>;(大于号)在Ruby中?

使用>;(大于号)在Ruby中?,ruby,string,compare,Ruby,String,Compare,我在一个项目中遇到了一段代码,看起来有点吓人。它应该显示两个数字之间的+/-增量,但它使用来比较数字字符串而不是数字 我假设代码目前正在按预期工作,所以我只是想了解Ruby在本例中是如何比较这些字符串的 下面是一个替换了变量的示例: if '55.59(100)' > '56.46(101)' delta = '+' else delta = '-' end String包括Comparable模块,该模块基于基类的compare()方法定义、=)等。因此,如果字符串a按字母顺序

我在一个项目中遇到了一段代码,看起来有点吓人。它应该显示两个数字之间的+/-增量,但它使用
来比较数字字符串而不是数字

我假设代码目前正在按预期工作,所以我只是想了解Ruby在本例中是如何比较这些字符串的

下面是一个替换了变量的示例:

if '55.59(100)' > '56.46(101)'
  delta = '+'
else
  delta = '-'
end

String
包括
Comparable
模块,该模块基于基类的compare(
)方法定义
=
)等。因此,如果字符串a按字母顺序排在字符串b之前,
ab
返回
-1
,并且在比较数字的字符串表示形式时要非常小心。(即第一个字符到第一个字符,第二个字符到第二个…)

irb(main):001:0>'44'<'45'
=>正确
irb(主要):002:0>'44.123(无论什么)<'99.921(香蕉)'
=>正确
但是

irb(main):003:0>'44.123'<'100'
=>错误
irb(主要):004:0>'44.123'<'9.123'
=>正确

只要你知道你总是比较等宽字符串,字典顺序匹配数字顺序。如果没有,坏事情就会发生(特别是当最重要的数字发生变化时)。

如果需要将字符串作为浮点数进行比较,请使用它:

if '10.1'.to_f > '9.239'.to_f
  print 'yes'
end

正如@Zack`所说,所有的比较都是基于该类的“太空船”方法。有关String类的详细信息,请参见。
irb(main):003:0> '44.123' < '100'
=> false
irb(main):004:0> '44.123' < '9.123'
=> true
if '10.1'.to_f > '9.239'.to_f
  print 'yes'
end