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

Nul*_*uli 16 ruby syntax

我正在做的事情:

result = (not question?) \
          and ( \
            condition \
            or ( \
              comparer == compared and another_question? \ 
            ) \
          )   
Run Code Online (Sandbox Code Playgroud)

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

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

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

syntax error, unexpected kAND, expecting kEND (SyntaxError)
Run Code Online (Sandbox Code Playgroud)

 syntax error, unexpected kOR, expecting ')'
Run Code Online (Sandbox Code Playgroud)

关于如何正确地做到这一点的任何想法?

out*_*tis 18

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

请注意,您不需要转义每个换行符.

result = (not question?) \
          and (
            condition \
            or (
              comparer == compared and another_question?
            )
          ) 
Run Code Online (Sandbox Code Playgroud)


Zac*_* Xu 11

对于逻辑表达式,你应该使用&&,||,!,不and,or,not.

and,or,not应该只被用于控制流.

原因之一是&&,||,!具有优先级高于and,or,not.

此博客文章中阅读更多相关信息.


und*_*gor 8

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

result = (not question?) and (
                condition or
                (comparer == compared and another_question?)
         )
Run Code Online (Sandbox Code Playgroud)

(用MRI 1.8.7测试)

  • @TheLindyHop:是的,用反斜杠屏蔽换行符;-)我不知道其他可能性.也许你可以重做代码以避免过于复杂的逻辑表达式? (2认同)

Tho*_*ith 8

试试这个:

sub = (comparer == compared and another_question?)
result = (not question?) and (condition or sub)
Run Code Online (Sandbox Code Playgroud)

不需要把整个事情做成一个表达.