USES params.ms.dict axiom_push.ms.dict core.ms.dict ElementsRTTI.ms.dict Generation.ms.dict ; kind_NormalClass . STRING FUNCTION ValueToKey ANY IN aValue RULES ( aValue IsString ) aValue ( aValue IsArray ) ( aValue .map> call.me strings:Cat ) ( ( aValue IsObj ) AND ( aValue Is class::TtfwWord ) ) ( VAR l_UID aValue .UID >>> l_UID if ( l_UID IsNil ) then begin aValue pop:Word:Name end // ( l_UID Is Nil ) else l_UID ) ( aValue IsIntf ) ERROR 'Невозможно построить ключ для интерфейса' ( aValue IsObj ) ERROR 'Невозможно построить ключ для абстрактного объекта' ( aValue IsBool ) ( aValue ToPrintable ) ( aValue IsInt ) ( aValue ToPrintable ) ( aValue IsNil ) '' DEFAULT ( aValue ToPrintable ) ; // RULES >>> Result ; // ValueToKey : A CONST UID 'xxxA' ; // A : B CONST UID 'xxxB' ; // B : C ; // C 'a' ValueToKey . true ValueToKey . false ValueToKey . [ true ] ValueToKey . [ false ] ValueToKey . [ false true ] ValueToKey . [ true false ] ValueToKey . [ 'a' true false 'b' ] ValueToKey . @ A ValueToKey . @ B ValueToKey . [ @ A ] ValueToKey . [ @ B ] ValueToKey . [ @ A @ B ] ValueToKey . [ @ A [ @ B ] ] ValueToKey . [ [ @ A @ B ] ] ValueToKey . 123 ValueToKey . kind_NormalClass ValueToKey . @ C ValueToKey . [empty] ValueToKey . [] ValueToKey . [ ] ValueToKey . @ () ValueToKey . @ ( ) ValueToKey . @ A .UID . @ B .UID .
"Если любящему ООП программисту дать машинку для закручивания крышек на банках с огурцами - не сомневайтесь: он выстроит иерархию из 25 наследников и приспособит её в качестве электрической зубной щётки.
Если вдруг этого не произойдёт - значит вам попался неправильный ООП-программист, видимо, он на самом деле - латентный функциональщик."
Латентный функциональщик.... Да...
Комментариев нет:
Отправить комментарий