Подтвердить что ты не робот

Ruby: Многострочный условный синтаксис: как мне это сделать?

Что я пытаюсь сделать:

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

Цель состоит в том, чтобы иметь сложную и/или логическую схему и все еще иметь ее читабельную.

Проблема с вышеприведенным синтаксисом заключается в том, что он каким-то образом скопирует скобки в рубиновом синтаксическом анализаторе, поэтому консоль говорит, что ошибка в файле, в котором этот код отсутствует. (хотя он в стеке вызовов)

без обратной косой черты, я получаю следующее:

syntax error, unexpected kAND, expecting kEND (SyntaxError)

и

 syntax error, unexpected kOR, expecting ')'

любые идеи о том, как правильно это сделать?

4b9b3361

Ответ 1

Удалите пробел после обратного слэша в another_question? \. Вы избегаете пробела, а не новой строки, что вызывает синтаксическую ошибку.

Обратите внимание, что вам не нужно избегать каждой новой строки.

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

Ответ 2

Для логического выражения вы должны использовать &&, ||, !, а не and, or, not.

and, or, not следует использовать только для потока управления.

Одна из причин заключается в том, что &&, ||, ! имеют более высокий приоритет, чем and, or, not.

Подробнее об этом читайте в этом сообщении в блоге.

Ответ 3

Убедитесь, что каждая строка (кроме последней) заканчивается оператором, поэтому интерпретатор "знает", что будет больше операндов, например,

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

(проверено с помощью МРТ 1.8.7)

Ответ 4

Попробуйте следующее:

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

Не нужно делать все одно выражение.