我真的无法理解下面的代码是如何工作的......
options.each { |p| 如果 p[0] == '-'[0] 休息 结尾...
它真的检查这个字符串吗?“-[0]”??还是我错过了什么?
对不起这个愚蠢的问题,但我的思想现在被封锁了......
我真的无法理解下面的代码是如何工作的......
options.each { |p| 如果 p[0] == '-'[0] 休息 结尾...
它真的检查这个字符串吗?“-[0]”??还是我错过了什么?
对不起这个愚蠢的问题,但我的思想现在被封锁了......
在 Ruby 1.8 或更低版本中'-'[0]
将为您提供 45,这是字符的 ASCII 值-
。所以它所做的是检查是否p[0]
等于 45。
在 Ruby 1.9 中,'-'[0]
会给你'-'
,所以String#ord
如果你想要 ASCII 值,建议使用:
if p[0] == '-'.ord
比较看起来是针对 ruby 1.8 和 1.9 版本之间不同的 string[index] 语义的解决方法。@robbrit 描述了这两者之间的不同行为。由于比较的左侧和右侧都使用 [0] 来获取字符串的第一个字符,因此它们要么都得到 ascii 序数(1.8),要么都得到单个字符长度的字符串(1.9),因此有一个在任一版本中进行有效比较。解决此行为差异的另一个常见构造是使用范围下标在任一版本的 ruby 中获取单字符字符串,例如:
str[0..0] == '-'