除了thesecretmaster's answer,让我们来看看Ruby的语法分析器中:
require 'ripper'
require 'pp'
pp Ripper.lex("''.split /./")
# [[[1, 0], :on_tstring_beg, "'" ],
# [[1, 1], :on_tstring_end, "'" ],
# [[1, 2], :on_period, "." ],
# [[1, 3], :on_ident, "split"],
# [[1, 8], :on_sp, " " ],
# [[1, 9], :on_regexp_beg, "/" ],
# [[1, 10], :on_tstring_content, "." ],
# [[1, 11], :on_regexp_end, "/" ]]
添加空间,使红宝石承认/
字符的除法运算符:
pp Ripper.lex("''.split/./")
# [[[1, 0], :on_tstring_beg, "'" ],
# [[1, 1], :on_tstring_end, "'" ],
# [[1, 2], :on_period, "." ],
# [[1, 3], :on_ident, "split"],
# [[1, 8], :on_sp, " " ],
# [[1, 9], :on_op, "/" ],
# [[1, 10], :on_sp, " " ],
# [[1, 11], :on_period, "." ],
# [[1, 12], :on_op, "/" ]]
是否有其他丢弃包袱的一般情况不能按预期工作?
人为的例子:
def foo(i = 1)
10 * i
end
foo(- 2) #=> -20
foo - 2 #=> 8
另一种:
b = 2
def a(arg)
arg
end
a *b #=> 2
a = 5
a *b #=> 10
第一a *b
被解释为a(*b)
,而第二变a * b
。添加圆括号强制Ruby调用该方法:
a(*b) #=> 2
是的,解析器似乎被正则表达式中的空间所困惑... –
@SergioTulentsev,如果它是一个错误,我会报告它。但是,在我的假设中,我是否正确:我应该期望非parens代码能够普遍工作,或者是否有一些特殊情况在一段时间内被认为是例外情况(除了哈希之外)? – ndn
为什么你会在正则表达式中有空间?我认为这本身就是一个问题。 – thesecretmaster