Ruby:多行条件语法:我该怎么做?

时间:2011-08-26 21:35:31

标签: ruby syntax

我正在尝试做什么:

result = (not question?) \
          and ( \
            condition \
            or ( \
              comparer == compared and another_question? \ 
            ) \
          )   

目标是拥有复杂和/或逻辑,并且仍然具有可读性。

上面尝试语法的问题在于它是如何弄乱ruby的解析器中的括号,所以控制台说错误是在这个代码不在的文件中。(虽然它在调用堆栈中)

没有反斜杠,我得到了这些:

syntax error, unexpected kAND, expecting kEND (SyntaxError)

 syntax error, unexpected kOR, expecting ')'

关于如何正确执行此操作的任何想法?

4 个答案:

答案 0 :(得分:18)

删除another_question? \中反斜杠后的空格。您正在转义空格而不是换行符,这会导致语法错误。

请注意,您无需转义每个换行符。

result = (not question?) \
          and (
            condition \
            or (
              comparer == compared and another_question?
            )
          ) 

答案 1 :(得分:11)

对于逻辑表达式,您应该使用&&||!,而不是andornot

andornot只能用于控制流。

一个原因是&&||!的优先级高于andornot

this blog post了解详情。

答案 2 :(得分:8)

确保每一行(除了最后一行)以一个运算符结束,因此解释器“知道”将会有更多的操作数,例如。

result = (not question?) and (
                condition or
                (comparer == compared and another_question?)
         )

(用MRI 1.8.7测试)

答案 3 :(得分:8)

试试这个:

sub = (comparer == compared and another_question?)
result = (not question?) and (condition or sub)

无需将整个事物作为一个表达。