class Dog
def name
@name ||= "Fido"
end
end
正常,但如果在||和=之间插入一个空格,系统就报错。Ruby 什么时候可以插空格,什么时候不可以?
ruby 解析 ||=
的代码 (和 *=, /=, +=, ...
类似) 在 parse.y 中 (大约 7000 多行后...):
case '|':
if ((c = nextc()) == '|') {
lex_state = EXPR_BEG;
if ((c = nextc()) == '=') {
set_yylval_id(tOROP);
lex_state = EXPR_BEG;
return tOP_ASGN;
}
在源代码扫到 |
的时候看看下个是否是 |
, 如果是,再看下下个是否是 =
, 如果是,就生成一个词法元素 tOP_ASGN
如果要支持 || =
中间有任意多空格,就要把它改成语法元素,大概会像是这样子:
op_asng : tOP '='
{ ... }
有兴趣和时间的同鞋可以向 ruby 提交一个 patch...