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

我正在运行 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不能解析您的语句和上述语句,而不需要更好的提示,例如明确要求另一行的二进制运算符.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...