По мотивам - Коротко. Сделал чудную штуку - переопределение слов
Теперь код:
Можно переписать так:
"Под капотом" это всё крайне просто устроено.
Позже допишу. Ну и можно даже так написать:
Возможно это можно упрощать.
В плане минимизации использования @.
А можно так:
А можно сделать так:
- минимизируем использование @.
Теперь код:
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
- минимизируем использование @.
Комментариев нет:
Отправить комментарий