Exec

From SunFlurry wiki
Revision as of 08:50, 7 February 2021 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  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));