我真的无法理解下面的代码是如何工作的......
options.each { |p| if p[0] == '-'[0] break end...
它确实检查了这个字符串吗? “ - [0]” ??或者我错过了什么? 抱歉这个愚蠢的问题,但我的思绪现在被封锁了......
答案 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] == '-'