Оператор {...}
Оператор {...}
- создание действия, выполняющего последовательность других действий.
Синтаксис
{
operator1
...
operatorN
}
Операторы могут быть двух видов:
actionOperator
LOCAL [NESTED] name1, ..., nameN = returnClass (paramClass1, ..., paramClassN)
Описание
Последовательность операторов-действий и операторов LOCAL
, заключенных в фигурные скобки, создает новое действие, выполнение которого - это последовательное выполнение перечисленных действий и создание локальных свойств. Область видимости созданных внутри оператора {...}
локальных свойств заканчивается в конце этого оператора.
Параметры
-
actionOperator
Контекстно-зависимый оператор-действие. После каждого оператора должна идти точка с запятой, за исключением операторов, заканчивающихся закрывающей фигурной скобкой. Лишние точки с запятой не являются ошибкой.
-
NESTED
Ключевое слово, при указании которого локальное свойство будет помечено как вложенное, то есть все его изменения будут видны в новых сессиях, а при закрытии этих сессий, изменения этого свойства попадут в текущую сессию. Отметим, что такое поведение аналогично поведению обычного локального свойства (не
NESTED
) при использовании оператораNEWSESSION
с указанным ключевым словомNESTED LOCAL
(или простоNESTED
, если это локальное свойство явно указано в с писке свойств) -
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);
}