Хотя функция эта безымянная, ссылку на неё можно присвоить переменной
bC:= {| a1,a2 |.t.}
и выполнить с помощью функции eval ()
Eval (bC)
В эту функцию можно передать параметры, функция с аргументами прмет следующий вид:
Eval (bC, a1,a2)
Список параметров безымянной функции при объявлении располагается между двумя вертикальными линиями:
{|a1,a2|.t.}
Движок блоков кода системы IxBase – это функция DbfRun (cName). В функцию передается имя блока кода, хранящегося в базе данных, который необходимо выполнить. Текст рабочей функции программы IxBase приведен ниже:
*********************************************************
FUNCTION dbfRun (iOrd)
/********************************************************
Синтаксис:
DbfRun (iOrd) —> evalution
Аргументы:
iOrd – имя блока кода, который необходимо выполнить.
Возвращаемое значение:
после выполнения функция возвращает результат выполнения блока кода.
Описание:
Функция системная.
На ее базе сформирован менеджер-интерпретатор блоков кода.
Функция работает с таблицей DBFBLO00.dbf
Если вызываемый вектор не существует в таблице блоков кода, то он будет создан.
Выполнение блоков кода поддерживается стеком, размер которого определен массивом arrDbfRun [].
Откомпилированный блок помещается в массив для повторного использования.
Например:
DBFRUN («ALLUSE00F2») – вызывается на выполнение блок кода с именем «ALLUSE00F2»
Файл: ixBase.prg
Автор: Анатолий Шевелев.
Дата создания: 1993 год.
Дата последнего изменения: 1995 год.
*********************************************************
LOCAL reT:=.t.
LOCAL inT:=aScan (arrDbfRun, {|z| z [1] ==iOrd})
LOCAL ixB
IF inT=0
aDel (arrDbfRun,1)
IF (ixB:=DbfBlo00-> (NaiSpr (iOrd,1,3))) =»»
ixAddVal (ixB, iOrd, SubStr (iOrd,9),ixB:=«*»)
ixB:=» {||.t.}»
ELSEIF ixB=«*»
ixB:=» {||.t.}»
ELSEIF ixB=» {|»
ELSE
ixB:=» {||"+ixB+»}»
ENDIF
arrDbfRun [Int:=Len (arrDbfRun)]:= {iOrd,& (ixB)}
END
BEGIN SEQUENCE
ixO:=iOrd
reT:=eVal (arrDbfRun [inT,2])
RECOVER
eval (& (» {||.t.}»))
errorblock (ErrorBlock ({||.t.}))
END SEQUENCE
RETURN reT
*********************************************************
Таблица для хранения блоков кода
Эта таблица для программы является системной и ключевой. Таблица состоит из трех полей. Первое поле хранит имя фолдера блока кода. Второе – предназначено для спецификаций имени вектора обработки вызова из программы. Третье – содержит сам блок кода.
Конец ознакомительного фрагмента.