Ruby 求解:关于空格

plasmiq · 2012年12月04日 · 最后由 plasmiq 回复于 2012年12月04日 · 2463 次阅读
class Dog
  def name
    @name ||= "Fido"
  end
end

正常,但如果在||和=之间插入一个空格,系统就报错。Ruby 什么时候可以插空格,什么时候不可以?

||= 是一个固定语法

单独的 || 不是 or 的意思么,单独解释能讲通啊

你能解释通 || 可你怎么解释 = "Fido"...

这跟 += ,-= 之类是一样的

It is a method.

method...

in ruby world, everything is object.

||= is a method.

报错什么,提示没有方法还是参数问题?

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...

#10 楼 @luikore 吕哥,强大!

惊了·……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号