Ruby: многострочный условный синтаксис: как мне это сделать? - PullRequest
16 голосов
/ 27 августа 2011

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

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 ]

18 голосов
/ 27 августа 2011

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

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

result = (not question?) \
          and (
            condition \
            or (
              comparer == compared and another_question?
            )
          ) 
11 голосов
/ 15 ноября 2013

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

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

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

Подробнее об этом можно прочитать в этом блоге .

8 голосов
/ 27 августа 2011

Попробуйте это:

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

Нет необходимости делать все это одним выражением.

8 голосов
/ 27 августа 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...