0

我真的无法理解下面的代码是如何工作的......

options.each { |p|  
  如果 p[0] == '-'[0]  
    休息  
  结尾...

它真的检查这个字符串吗?“-[0]”??还是我错过了什么?
对不起这个愚蠢的问题,但我的思想现在被封锁了......

4

2 回答 2

6

在 Ruby 1.8 或更低版本中'-'[0]将为您提供 45,这是字符的 ASCII 值-。所以它所做的是检查是否p[0]等于 45。

在 Ruby 1.9 中,'-'[0]会给你'-',所以String#ord如果你想要 ASCII 值,建议使用:

if p[0] == '-'.ord
于 2012-06-20T17:48:24.860 回答
0

比较看起来是针对 ruby​​ 1.8 和 1.9 版本之间不同的 string[index] 语义的解决方法。@robbrit 描述了这两者之间的不同行为。由于比较的左侧和右侧都使用 [0] 来获取字符串的第一个字符,因此它们要么都得到 ascii 序数(1.8),要么都得到单个字符长度的字符串(1.9),因此有一个在任一版本中进行有效比较。解决此行为差异的另一个常见构造是使用范围下标在任一版本的 ruby​​ 中获取单字符字符串,例如:

str[0..0] == '-'
于 2012-06-20T18:05:22.820 回答