Перейти к основному содержимому
Версия: 7.0

Оператор EVAL

Оператор EVAL - создание действия, выполняющего код на языке lsFusion.

Синтаксис

EVAL [ACTION] expression [PARAMS paramExpr1, ..., paramExprN]

Описание

Строка, получаемая из expression, оборачивается платформой в модуль с уникальным именем, зависимости которого охватывают все загруженные модули проекта, и затем выполняется. Без ACTION код трактуется как последовательность инструкций; одна из них должна объявлять действие с именем run — именно оно и будет выполнено. С ACTION код трактуется как тело самого действия run — последовательность операторов-действий и объявлений локальных свойств, — а runtime-аргументы адресуются позиционно как $1, $2, ....

Runtime-аргументы передаются через опциональный блок PARAMS — список выражений, значения которых передаются действию run в качестве позиционных аргументов. Без PARAMS действие run вызывается без аргументов.

Параметры

  • ACTION

    Опциональное ключевое слово. При его указании исходный код трактуется как тело действия run напрямую, а не как последовательность инструкций, которая его объявляет.

  • expression

    Выражение, значением которого является строка с исходным кодом, подлежащим выполнению.

  • paramExpr1, ..., paramExprN

    Непустой список выражений, значения которых передаются действию run в качестве позиционных аргументов. Количество должно соответствовать количеству параметров run.

Примеры

// форма с инструкциями: исходная строка объявляет действие `run`
code 'Исходный код' = DATA BPSTRING[2000] ();
execute 'Выполнить код' { EVAL code(); }

// форма ACTION: строка является телом действия `run` напрямую
addProperty { EVAL ACTION 'MESSAGE \'Hello World\''; }

// форма ACTION с PARAMS — runtime-аргументы адресуются как `$1, $2, ...`
greet 'Поприветствовать пользователя' (CustomUser u) { EVAL ACTION 'MESSAGE \'Здравствуй, \' + name($1);' PARAMS u; }

// форма с инструкциями и PARAMS — значения связываются позиционно с параметрами `run`
greetByName 'Поприветствовать по имени' (STRING n) {
EVAL 'run(STRING name) \{ MESSAGE \'Здравствуй, \' + name; \}' PARAMS n;
}