ruby – “OR”运算符必须放在上一行的末尾? (意外的torop)

前端之家收集整理的这篇文章主要介绍了ruby – “OR”运算符必须放在上一行的末尾? (意外的torop)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在运行 @L_404_0@ 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不能解析您的语句和上述语句,而不需要更好的提示,例如明确要求另一行的二进制运算符.

猜你在找的Ruby相关文章