Posted to tcl by dgp at Fri Jan 16 16:50:20 GMT 2015view pretty
% package require Itcl 3 3.4 % itcl::class Base { method do {args} {eval $args} method foo {} {bar} method bar {} {puts Base::bar} } % itcl::class Derived { inherit Base method bar {} {puts Derived::bar} } % proc bar {} {puts proc::bar} % Derived demo demo First we demo the expected "polymorphic" dispatch. An implicit "$this" is prepended to "bar" so we get the derived "bar" method called. % demo foo Derived::bar Then we demo that sticking an [eval] in the middle doesn't change that % demo do bar Derived::bar The builtin method "info" does the same -- we get the heritage info for the $this object. % demo info heritage ::Derived ::Base ***BUT!!!!*** if we stick an [eval] in the middle, things change! % demo do info heritage ::Base WTF!!! Itcl test info-4.3b insists this is the expected behavior, but that makes the info method bizarrely magical in suspending the rules applied to all other methods. Porting to Itcl 4 makes use of TclOO machinery, and trying to force this magic into that is leading to a royal mess! The attempts have broken other things. Someone please explain this nonsense.