Оператор {...}
Оператор {...} - создание действия, выполняющего последовательность других действий.
Синтаксис
{
operator1
...
operatorN
}
Операторы могут быть двух видов:
actionOperator
LOCAL [NESTED [MANAGESESSION | NOMANAGESESSION]] name1, ..., nameN = returnClass (paramClass1, ..., paramClassN)
Описание
Последовательность операторов-действий и операторов LOCAL, заключенных в фигурные скобки, создает новое действие, выполнение которого - это последовательное выполнение перечисленных действий и создание локальных свойств. Область видимости созданных внутри оператора {...} локальных свойств заканчивается в конце этого оператора.
Параметры
-
actionOperatorКонтекстно-зависимый оператор-действие. После каждого оператора должна идти точка с запятой, за исключением операторов, заканчивающихся закрывающей фигурной скобкой. Лишние точки с запятой не являются ошибкой.
-
NESTEDКлючевое слово, помечающее локальное свойство как вложенное. Без дополнительных модификаторов свойство трактуется как вложенное и при пересечении
NEWSESSION, и при выполненииAPPLY/CANCEL. Семантика та же, что и в оператореDATA. -
MANAGESESSION|NOMANAGESESSIONКлючевые слова, которые могут указываться только после
NESTED.MANAGESESSIONозначает, что свойство трактуется как вложенное только дляAPPLY/CANCEL.NOMANAGESESSIONозначает, что свойство трактуется как вложенное только при пересеченииNEWSESSION.
-
name1, ..., nameNСписок имен создаваемых локальных свойств. Имена задаются простыми идентификаторами.
-
returnClassИдентификатор класса возвращаемого значения локального свойства.
-
argumentClass1, ..., argumentClassNСписок идентификаторов классов аргументов локального свойства.
Примеры
CLASS Currency;
name = DATA STRING[30] (Currency);
code = DATA INTEGER (Currency);
CLASS Order;
currency = DATA Currency (Order);
customer = DATA STRING[100] (Order);
copy 'Копировать' (Order old) {
NEW new = Order { // создается действие, состоящее из последовательного выполнения двух действий
currency(new) <- currency(old); // точка с запятой указывается после каждого оператора
customer(new) <- customer(old);
} // в этой строке точка с запятой не ставится, потому что оператор заканчивается на }
}
loadDefaultCurrency(ISTRING[30] name, INTEGER code) {
NEW c = Currency {
name(c) <- name;
code(c) <- code;
}
}
run () {
loadDefaultCurrency('USD', 866);
loadDefaultCurrency('EUR', 1251);
}