<<< BACK NEXT >>>

ДИНАМИЧЕСКОЕ И СТАТИЧЕСКОЕ ПОСТРОЕНИЕ И УДАЛЕНИЕ ПЕРЕМЕННЫХ

Создание структур и массивов осуществляется несколькими способами. Один из основных – посредством оператора

   BUILD <имя переменной> ( [<список параметров>] ) ] [ : <вызов блока> ]
         {, <имя переменной> [ ( [<список параметров>] ) ] }

где <вызов блока> - выражение вызова блока. Переменные, перечисляемые в build,должны быть составными и определены.
<вызов блока> описывает вызов с параметрами. С точки зрения прагматики такие конструкции могут быть использованы для динамической инициализации создаваемой структурной переменной. В общем случае - для любых целей. Если же структура была определена с конструктором, то сначала будет запущен конструктор.

Пример:

internal <int> blk( <double> dbVar, <tagStru> pStru ), =>
         <tagStru> onCreate( <tagStru> pStru ), =>
         <null> onDelete( <tagStru> pStru )

private <tagStru> stru, <double> [100, 200] arrOfDouble, =>
        <blk> vBlock

. . .

build stru : onCreate, arrOfDouble, vBlock

Тело stru будет динамически создано, после чего будет вызван блок с именем onCreate.Если stru имеет конструктор, то по

build stru( x, y, z ) : onCreate( w )

будет создано тело структуры и вызван конструктор с параметрами x, y, z. Мы можем совместить описание и создание структурных переменных с помощью

BUILD PRIVATE <список переменных с инициализацией>

build private <tagStru> stru( parm1, parm2, parm3 ) : onCreate( w ), =>
              <double> [100, 200] arrOfDouble, =>
              <blk> vBlock := null

 

Аналогично для локальных переменных:

BUILD LOCAL <список переменных с инициализацией>

Динамически созданные переменные могут быть удалены с помощью оператора

DELETE <переменная> [ : <вызов блока> ] { , <переменная> : <вызов блока> ] }

Прежде чем тело составной переменной будет удалено из памяти, будет вызван представленный по <вызов блока> блок. Если данная переменная имеет деструктор, то такой блок будет вызван до деструктора.

BUILD_BY <имя переменной>[ ( [<список параметров>] ) ]
         {, <имя переменной> [ ( [<список параметров>] ) ] }

аналогичен BUILD, за исключением того, что build_by применим только для структур и коллекций с конструкторами; тело структур и коллекций не создается – это возлагается на конструктор.

struct tagStru2 { . . . } { Create, Delete }

build_by private <tagStru2> stru( x, y ) : AfterCreate( z )

<<< BACK NEXT >>>