【发布时间】:2014-08-13 20:21:16
【问题描述】:
这个版本的方法定义成功
def foo(bar)
baz >= baz(bar)
end
而这个版本的方法有语法错误:
def foo(bar)
baz >= baz bar
end
# syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
Ruby 认为我的意思是baz(>= baz bar)(它不应该工作,因为你不能用二元运算符开始表达式?)还是(baz >= baz) bar? (这没有任何意义)?
我会很感激某种解释,甚至更好的是指向 Ruby 文档的指针,它解释了为什么这个表达式如此难以解析。
【问题讨论】:
-
Ruby 认为您的意思是
(baz >= baz) bar,这完全有道理,因为那是您写的。初始实现作用于baz(bar)的返回结果。虽然ruby和其他语言允许您在某些情况下放弃括号,但Boolean操作不是其中之一。 -
谢谢@sawa,你很好地消除了我一时冲动的语气。但我仍然认为
irb提示中有一些价值,以免有人认为我编造了这个故事:) -
@engineersmnky 我同意你的解释,如果我用我常用的语言编程,我会支持你的。令我惊讶的是 Ruby 允许您省略它们,我认为这是因为他们已经开发了一些解决歧义的方法,这种歧义通常通过在语言中强制使用方法括号来解决。我的假设得到了支持(我认为)文档ruby-doc.org/core-2.1.2/doc/syntax/precedence_rdoc.html 甚至没有在运算符优先级列表中列出方法括号。
-
无论如何,看来我需要开发某种编码风格以避免将来出现这些错误。谢谢大家。