| CLIP() | Выполнить функцию. |
| COMPILEFILE() | Компиляция файла. |
| COMPILESTRING() | Компиляция строки. |
| ERRORBLOCK() | Отправляет блок кода на выполнение при возникновении ошибки времени |
| EVAL() | Выполняет блок кода. |
| FIELDBLOCK() | Создает блок кода для данного поля базы данных. |
| FIELDWBLOCK() | Возвращает блок кода для поля в данной рабочей области. |
| LOAD() | Загрузка байт-кода или динамической библиотеки. |
| LOADBLOCK() | Загрузка байт-кода. |
| MEMVARBLOCK() | Возвращает блок кода для данной переменной памяти. |
| START() | Начать задачу. |
CLIP(<sFuncName>, [<Param1>, ..., <ParamN>) --> <vData>
Возвращает результат выполнения функции <sFuncName>.
CLIP() выполняет функцию с именем <sFuncName> и возвращает результат выполнения.
CLIP("substr","asdfghjkl",2,3) // --> "sdf"
Не зависит от платформ
EVAL(<блок кода>,[<список аргументов>]) --> значение последнего выражения
EVAL() возвращает значение последнего выражения в блоке. Блок кода может возвращать значение любого типа.
EVAL() является функцией обработки блока кода. Это наиболее мощное средство в системе xClipper для выполнения блоков кода. Блок кода является особым значением данных, которое относится к части компилированного кода программы. Для получения дополнительной информации по блокам кода читайте главу "Основные концепции".
Для выполнения блока кода нужно вызвать функцию EVAL(), передав ей блок кода и набор параметров. Параметры передаются блоку перед его выполнением. Блоки кода могут представлять собой последовательность выражений, разделенных запятыми. Когда блок кода выполняется, возвращаемым значением является значение последнего выражения в блоке.
Блок кода обычно компилируется при компиляции xClipper-программы. Однако бывают случаи, когда во время выполнения программы возникает необходимость компилировать блок кода из символьной строки. (Например, при использовании оператора (&)).
EVAL() часто используется для создания функций - итераторов. Это такие функции, которые применяют блок к каждому элементу структуры данных. AEVAL(), ASORT(), ASCAN() и DBEVAL() являются функциями - итераторами. AEVAL(), например, выполняет блок для каждого элемента в массиве.
В примере показано создание блока кода:
bBlock := { |nArg| nArg + 1 }
? EVAL(bBlock, 1) // Результат: 2
В следующем примере демонстрируется, как может компилироваться блок
кода во время выполнения с помощью использования оператора (&):
bBlock := &("{ |nArg| nArg + 1 }") // Транслировать строку блока
? EVAL(bBlock, 1) // Выполнить блок
FIELDBLOCK(<поле базы>) --> блок кода
FIELDBLOCK() возвращает блок кода, предназначенный для либо присваивания нового значения, либо считывания текущего значение данного поля.
FIELDBLOCK() - функция баз данных, создающая блок кода, при выполнении которого функцией EVAL() с аргументом, значение аргумента присваивается <поле базы>. При выполнении без аргумента кодовый блок возвращает текущее значение <поле базы>.
Существование <поле базы> не требуется при создании блока кода, но необходима его доступность в текущей либо указанной алиасом рабочей области при вызове функции EVAL() для выполнения блока кода.
Следующий пример сравнивает функцию FIELDBLOCK() и создание блока
кода с помощью оператора макроподстановки. Заметим, что
использование FIELDBLOCK() позволяет вам избежать потерь в скорости
и объеме от макроподстановки:
// Блок кода определяется с использованием оператора макроподстановки
bSetGet := &("{ |setVal| IF(setVal == NIL, FName, FName := setVal)}")
// Блок кода определяется с помощью FIELDBLOCK()
// Созданный здесь блок кода функционально эквивалентен блоку кода
// bSetGet, созданному выше
bSetGet := FIELDBLOCK("FName")FIELDWBLOCK(<имя поля>,<номер рабочей области>) --> блок кода
FIELDWBLOCK() возвращает блок кода, предназначенный либо для присваивания нового значения, либо для считывания текущего значения данного поля.
FIELDWBLOCK() - функция баз данных, создающая блок кода, при выполнении которого функцией EVAL(), сначала выбирается рабочая область - <номер рабочей области>. Если аргумент блока кода был передан функцией EVAL(), то блок кода присваивает <поле базы> значение аргумента. При выполнении без аргумента, кодовый блок возвращает текущее значение <поле базы>.
Существование <поле базы> не требуется при создании блока кода, но необходима его доступность в указанной рабочей области при вызове функции EVAL() для выполнения блока кода.
Следующий пример сравнивает функцию FIELDWBLOCK() и создание
блока кода с помощью оператора макроподстановки. Заметим, что
использование FIELDWBLOCK() позволяет избежать потерь в скорости
и увеличения размеров от макроподстановки:
// Блок кода для рабочей области 1 определяется с использованием
// оператора макроподстановки
bSetGet := &( "{ |setVal| IF(setVal == NIL, ;
1->FName, 1->FName := setVal ) }" )
// Блок кода определяется с помощью FIELDWBLOCK()
// Создаваемый здесь блок кода функционально эквивалентен блоку кода
bSetGet := FIELDWBLOCK("FName", 1)MEMVARBLOCK(<имя переменной памяти>) --> блок кода
MEMVARBLOCK() возвращает блок кода, предназначенный либо для присваивания нового значения, либо для считывания текущего значения переменной памяти. Если <имя переменной памяти> не существует, то MEMVARBLOCK() возвращает NIL.
Блок кода, созданный функцией MEMVARBLOCK(), имеет два действия, зависящих от того, был ли передан аргумент блоку кода при его вычислении. Если блок кода вычислялся с аргументом, то он присваивает значение аргумента <имя переменной памяти>. Если вычислялся без аргумента, то кодовый блок возвращает значение <имя переменной памяти>.
Следующий пример сравнивает функцию MEMVARBLOCK() и создание
блока кода с помощью оператора макроподстановки. Заметим, что
использование MEMVARBLOCK() позволяет избежать потерь в скорости и
увеличения размеров от макроподстановки:
PRIVATE var := "Это строка"
// Блок кода определяется использованием макроподстановки
bSetGet := &("{|setVal| IF(setVal == NIL, var, var := setVal) }")
// Блок кода определяется с помощью MEMVARBLOCK()
// Создаваемый здесь блок кода функционально эквивалентен блоку
// кода bSetGet, созданному выше
bSetGet := MEMVARBLOCK("var")| Пред. | Начало | След. |
| TASK | Уровень выше | VIDEO |