Ruby奇怪的等式检查循环' - '[0]

时间:2012-06-20 17:42:15

标签: ruby

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

options.each { |p|  
  if p[0] == '-'[0]  
    break  
  end... 

它确实检查了这个字符串吗? “ - [0]” ??或者我错过了什么? 抱歉这个愚蠢的问题,但我的思绪现在被封锁了......

2 个答案:

答案 0 :(得分:6)

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

在Ruby 1.9中,p[0]会为您提供'-'[0],因此如果您想要ASCII值,建议使用'-'

String#ord

答案 1 :(得分:0)

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

str[0..0] == '-'