Инструкция +=
Инструкция += добавляет реализацию к абстрактному свойству.
Синтаксис
abstractProperty(param1, ..., paramN) +=
[WHEN conditionExpr THEN]
implementationExpr;
Описание
Инструкция += не создает новое свойство. Она добавляет еще одну реализацию к уже объявленному абстрактному свойству.
Для абстрактного свойства типа CASE блок WHEN conditionExpr THEN обязателен. Для абстрактных свойств типов MULTI и VALUE блок WHEN ... THEN не используется, и выражение реализации записывается сразу после +=.
Позиция добавляемой реализации в списке реализаций абстрактного свойства определяется его настройкой OVERRIDE FIRST / OVERRIDE LAST; доступные режимы — в статье об операторе ABSTRACT.
Параметры
-
abstractPropertyИдентификатор расширяемого абстрактного свойства.
-
param1, ..., paramNСписок типизированных параметров добавляемой реализации; задает ее сигнатуру. Список может быть пустым. Количество параметров и их классы должны быть совместимы с сигнатурой абстрактного свойства. Эти параметры можно использовать в
implementationExprи, для формыCASE, вconditionExpr. -
conditionExprВыражение для условия выбора этой реализации. Используется только для абстрактного свойства типа
CASE. -
implementationExprВыражение для реализации. Его класс результата должен быть совместим с классом результата абстрактного свойства.
Примеры
CLASS ABSTRACT AClass;
CLASS BClass : AClass;
CLASS CClass : AClass;
CLASS DClass : AClass;
name(AClass a) = ABSTRACT BPSTRING[50] (AClass);
innerName(BClass b) = DATA BPSTRING[50] (BClass);
innerName(CClass c) = DATA BPSTRING[50] (CClass);
innerName(DClass d) = DATA BPSTRING[50] (DClass);
name(BClass b) = 'B' + innerName(b);
name(CClass c) = 'C' + innerName(c);
name[AClass](BClass b) += name(b);
name(CClass c) += name(c);
name(DClass d) += 'DClass' + innerName(d) IF d IS DClass;
CLASS Person;
CLASS PersonDocumentType;
name = DATA ISTRING[64] (PersonDocumentType);
caption = ABSTRACT CASE ISTRING[100] (Person, PersonDocumentType);
caption(Person p, PersonDocumentType t) +=
WHEN p IS Person AND name(t) == 'Passport' THEN 'Паспорт';