Original in Russian: http://programmingmindstream.blogspot.ru/2015/08/blog-post_5.html
Follow-up to Briefly. Wonder of words redefining
Now this code:
can be rewritten in this way:
It seems so simple “under hood”.
I will write later. We can even write in this way:
We can make it more simple aiming to minimize using of @.
We can do in this way:
Or in this way:
It minimizes using of @.
Follow-up to Briefly. Wonder of words redefining
Now this code:
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
can be rewritten in this way:
USES axiom:ComboBox axiom:ComboTree axiom:ComboTreeEx ; REDEFINITION : pop:ComboBox:DropDown OBJECT IN aCombo callIfAccepted aCombo [ [ @ class::ComboTreeEx @ pop:ComboTreeEx:DropDown ] // pop:ComboTreeEx:DropDown can be called if aCombo is compliable with ComboTreeEx [ @ class::ComboTree @ pop:ComboTree:DropDown ] // pop:ComboTree:DropDown can be called if aCombo is compliable with ComboTree [ nil @ inherited ] // can be called if all other branches do not pass ] // callIfAccepted aCombo ; // pop:ComboBox:DropDown
It seems so simple “under hood”.
I will write later. We can even write in this way:
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 can be called if aCombo is compatible with ComboTreeEx, // and aValue is compatible with INTEGER [ @ STRING @ class::ComboTree @ pop:ComboTree:SetValue ] // pop:ComboTree:DropDown can be called if aCombo is compatible with ComboTree, // and aValue is compatible with STRING [ @ ANY nil @ inherited ] // can be called if all other branches do not pass ] // callIfAccepted aCombo ; // pop:ComboBox:DropDown
We can make it more simple aiming to minimize using of @.
We can do in this way:
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 can be called if aCombo is compatible with ComboTreeEx, // and aValue is compatible with INTEGER [ @ STRING @ class::ComboTree @ pop:ComboTree:SetValue ] // pop:ComboTree:DropDown can be called if aCombo is compatible with ComboTree, // and aValue is compatible with STRING [ @ STRING @ class::ComboBox @ inherited ] // inherited can be called if aCombo is compatible with ComboBox, // and aValue is compatible with STRING [ @ ANY @ ANY @ NotImplemented ] // can be called if all other branches do not pass // and causes error NotImplemented ] // callIfAccepted aCombo ; // pop:ComboBox:DropDown
Or in this way:
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 can be called if aCombo is compatible with ComboTreeEx, // and aValue is compatible with INTEGER @[ STRING class::ComboTree pop:ComboTree:SetValue ] // pop:ComboTree:DropDown can be called if aCombo is compatible with ComboTree, // and aValue is compatible with STRING @[ STRING class::ComboBox inherited ] // inherited can be called if aCombo is compatible with ComboBox, // and aValue is compatible with STRING @[ ANY ANY NotImplemented ] // can be called if all other branches do not pass // and causes error NotImplemented ] // callIfAccepted aCombo ; // pop:ComboBox:DropDown
It minimizes using of @.
Комментариев нет:
Отправить комментарий