什么可能的歧义导致这个Ruby代码抛出一个SyntaxError?

时间:2014-08-13 20:21:16

标签: ruby syntax

此方法的版本已成功定义

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 doc的指针,这解释了为什么这个表达式难以解析。

2 个答案:

答案 0 :(得分:1)

当不使用括号传递参数时,Ruby似乎无法与函数调用进行比较。我已经对此进行了一些测试,看起来非常全面:

irb(main):031:0> 4 < rand 5

#=>SyntaxError: (irb):31: syntax error, unexpected tINTEGER, expecting keyword_do or '{' or '('

答案 1 :(得分:0)

我想当你这个

2.1.2 :013 > def foo(bar)
2.1.2 :014?>   baz >= baz bar
2.1.2 :015?> end

红宝石翻译认为你正在尝试这样做

2.1.2 :013 > def foo(bar)
2.1.2 :014?>   baz(>= baz(bar))
2.1.2 :015?> end

我认为这就是发生语法错误的原因。将括号用于方法总是很好的做法。