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 |