我正在尝试做什么:
result = (not question?) \
and ( \
condition \
or ( \
comparer == compared and another_question? \
) \
)
目标是拥有复杂和/或逻辑,并且仍然具有可读性。
上面尝试语法的问题在于它是如何弄乱ruby的解析器中的括号,所以控制台说错误是在这个代码不在的文件中。(虽然它在调用堆栈中)
没有反斜杠,我得到了这些:
syntax error, unexpected kAND, expecting kEND (SyntaxError)
和
syntax error, unexpected kOR, expecting ')'
关于如何正确执行此操作的任何想法?
答案 0 :(得分:18)
删除another_question? \
中反斜杠后的空格。您正在转义空格而不是换行符,这会导致语法错误。
请注意,您无需转义每个换行符。
result = (not question?) \
and (
condition \
or (
comparer == compared and another_question?
)
)
答案 1 :(得分:11)
对于逻辑表达式,您应该使用&&
,||
,!
,而不是and
,or
,not
。
and
,or
,not
只能用于控制流。
一个原因是&&
,||
,!
的优先级高于and
,or
,not
。
在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)
无需将整个事物作为一个表达。