我正在运行
Ruby 1.9.
这是一个有效的语法:
items = (data['DELETE'] || data['delete'] || data['GET'] || data['get'] || data['POST'] || data['post'])
但这给我一个错误:
items = (data['DELETE'] || data['delete'] || data['GET'] || data['get'] || data['POST'] || data['post']) t.rb:8: Syntax error,unexpected tOROP,expecting ')' || data['GET'] || data['get'] |... ^
为什么?!
解决方法
我可以说的是“这就是它的工作原理”.
一般来说,Ruby解析器做出了惊人的工作,可以弄清楚表达式是否需要在另一行上继续.关于这个世界上所有其他的语言,都完全可以解决这个问题,并且需要一个实际的字符来继续下一行或终止语句.
如你所知,Ruby是特别的,几乎总是,它只是想出来.
在这种情况下,虽然存在冲突.解析器知道您的表达式尚未完成,因为它仍在寻找),但它可以是复合表达式.
例如,你可以这样写:
(p :a; p :b; p :c)
…但使用换行软终端器而不是; …以下语法确实可以正常工作:
(p :a p :b p :c)
(BTW,该表达式的值是序列中最后一个表达式的值.)
Ruby不能解析您的语句和上述语句,而不需要更好的提示,例如明确要求另一行的二进制运算符.