Difference between revisions of "Exec"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:50, 7 February 2021
Exec (Системные функции) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция производит компиляцию и исполнение блока текста, заданного на внутреннем языке, или компилированной заранее функции. Блок исполняется в контексте текущей функции с доступом к именам, совпадающим с доступом из кода, вызвавшего функцию. Функция вызывает прерывание, если аргумент не может быть скомпилирован из-за ошибки. Исполняемый код обладает свойствами кода внутри новой функции (счетчик циклов равен нулю, создаваемые переменные не будут переданы в вызывавшую функцию), однако, имеет доступ к локальным переменным вызывавшей функции. Функция может использоваться для вычисления функций с произвольным количеством аргументов (фильтры базы данных), исполнения кода из внешнего файла и т.д. Из блока исполнения можно выйти до окончания вычисления с помощью инструкции Exit
.
Синтаксис
Exec(<Блок для исполнения или компилированная функция (STRING, COMPILEDFUNCTION)>):<Исполнение завершено удачно 1 или 0 (INT)>
Аргументы
<Блок для исполнения или компилированная функция (STRING, COMPILEDFUNCTION)>
- Произвольный блок инструкций, может содержать имена функций, переменных, операции, магические функции, особые конструкции, в т.ч. объявления новых функций. В случае, если аргумент является компилированной функцией (см. Compile), этап компиляции будет пропущен.
Возвращаемое значение
Возвращает 1, если блок исполнен удачно, иначе возвращает 0.
Примеры
//Иногда возникает необходимость получения значения переменных с определенными именами по индексу или суффиксу // что было бы неудобно сделать обычный способом Var Стр1 Export,Стр2 Export,Стр3 Export,Стр4 Export,Стр5 Export,Стр6 Export,Стр7 Export,Стр8 Export,Стр9 Export,Стр10 Export; Function ПолучитьЗначениеПеременной(i) Exit Eval("Стр"+i); EndFunction //Заполнение группы переменных из цикла For i:=1 To 10 Do Exec("Стр"+i+":="+(i*2)); EndDo; //Получаем значение переменной по индексу //В лог будет выведено: 10 Message(ПолучитьЗначениеПеременной(5));