Оператор 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;
}