По мотивам - Коротко. Сделал чудную штуку - переопределение слов
Теперь код:
Можно переписать так:
"Под капотом" это всё крайне просто устроено.
Позже допишу. Ну и можно даже так написать:
Возможно это можно упрощать.
В плане минимизации использования @.
А можно так:
А можно сделать так:
- минимизируем использование @.
Теперь код:
USES axiom:ComboBox axiom:ComboTree ; REDEFINITION : pop:ComboBox:DropDown OBJECT IN aCombo if ( aCombo Is class::TvtComboTree ) then ( aCombo pop:ComboTree:DropDown ) else ( aCombo inherited ) ; // pop:ComboBox:DropDown
Можно переписать так:
USES
axiom:ComboBox
axiom:ComboTree
axiom:ComboTreeEx
;
REDEFINITION
: pop:ComboBox:DropDown
OBJECT IN aCombo
callIfAccepted aCombo [
[ @ class::ComboTreeEx @ pop:ComboTreeEx:DropDown ]
// pop:ComboTreeEx:DropDown вызывается, если aCombo совместим с ComboTreeEx
[ @ class::ComboTree @ pop:ComboTree:DropDown ]
// pop:ComboTree:DropDown вызывается, если aCombo совместим с ComboTree
[ nil @ inherited ]
// вызывается если все остальные ветки не прошли
] // callIfAccepted aCombo
; // pop:ComboBox:DropDown
"Под капотом" это всё крайне просто устроено.
Позже допишу. Ну и можно даже так написать:
USES
axiom:ComboBox
axiom:ComboTree
axiom:ComboTreeEx
;
REDEFINITION
: pop:ComboBox:SetValue
ANY IN aValue
OBJECT IN aCombo
callIfAccepted [ aValue aCombo ] [
[ @ INTEGER @ class::ComboTreeEx @ pop:ComboTreeEx:SetValue ]
// pop:ComboTreeEx:DropDown вызывается, если aCombo совместим с ComboTreeEx,
// а aValue совместимо с INTEGER
[ @ STRING @ class::ComboTree @ pop:ComboTree:SetValue ]
// pop:ComboTree:DropDown вызывается, если aCombo совместим с ComboTree,
// а aValue совместимо с STRING
[ @ ANY nil @ inherited ]
// вызывается если все остальные ветки не прошли
] // callIfAccepted aCombo
; // pop:ComboBox:DropDown
Возможно это можно упрощать.
В плане минимизации использования @.
А можно так:
USES
axiom:ComboBox
axiom:ComboTree
axiom:ComboTreeEx
;
REDEFINITION
: pop:ComboBox:SetValue
ANY IN aValue
OBJECT IN aCombo
callIfAccepted [ aValue aCombo ] [
[ @ INTEGER @ class::ComboTreeEx @ pop:ComboTreeEx:SetValue ]
// pop:ComboTreeEx:DropDown вызывается, если aCombo совместим с ComboTreeEx,
// а aValue совместимо с INTEGER
[ @ STRING @ class::ComboTree @ pop:ComboTree:SetValue ]
// pop:ComboTree:DropDown вызывается, если aCombo совместим с ComboTree,
// а aValue совместимо с STRING
[ @ STRING @ class::ComboBox @ inherited ]
// inherited вызывается, если aCombo совместим с ComboBox,
// а aValue совместимо с STRING
[ @ ANY @ ANY @ NotImplemented ]
// вызывается если все остальные ветки не прошли
// и вызывает ошибку NotImplemented
] // callIfAccepted aCombo
; // pop:ComboBox:DropDown
А можно сделать так:
USES
axiom:ComboBox
axiom:ComboTree
axiom:ComboTreeEx
;
REDEFINITION
: pop:ComboBox:SetValue
ANY IN aValue
OBJECT IN aCombo
callIfAccepted [ aValue aCombo ] [
@[ INTEGER class::ComboTreeEx pop:ComboTreeEx:SetValue ]
// pop:ComboTreeEx:DropDown вызывается, если aCombo совместим с ComboTreeEx,
// а aValue совместимо с INTEGER
@[ STRING class::ComboTree pop:ComboTree:SetValue ]
// pop:ComboTree:DropDown вызывается, если aCombo совместим с ComboTree,
// а aValue совместимо с STRING
@[ STRING class::ComboBox inherited ]
// inherited вызывается, если aCombo совместим с ComboBox,
// а aValue совместимо с STRING
@[ ANY ANY NotImplemented ]
// вызывается если все остальные ветки не прошли
// и вызывает ошибку NotImplemented
] // callIfAccepted aCombo
; // pop:ComboBox:DropDown
- минимизируем использование @.
Комментариев нет:
Отправить комментарий