此方法的版本已成功定义
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的指针,这解释了为什么这个表达式难以解析。
答案 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
我认为这就是发生语法错误的原因。将括号用于方法总是很好的做法。