Ruby: Многострочный условный синтаксис: как мне это сделать?
Что я пытаюсь сделать:
result = (not question?) \
and ( \
condition \
or ( \
comparer == compared and another_question? \
) \
)
Цель состоит в том, чтобы иметь сложную и/или логическую схему и все еще иметь ее читабельную.
Проблема с вышеприведенным синтаксисом заключается в том, что он каким-то образом скопирует скобки в рубиновом синтаксическом анализаторе, поэтому консоль говорит, что ошибка в файле, в котором этот код отсутствует. (хотя он в стеке вызовов)
без обратной косой черты, я получаю следующее:
syntax error, unexpected kAND, expecting kEND (SyntaxError)
и
syntax error, unexpected kOR, expecting ')'
любые идеи о том, как правильно это сделать?
Ответы
Ответ 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)
Не нужно делать все одно выражение.