'''[http://www.tcl.tk/man/tcl/TclCmd/my.htm%|%my]''', a [Tcl Commands%|%built-in] [Tcl] command, allows one method of an object to invoke another method of the same object. ** Documentation ** [http://www.tcl.tk/man/tcl/TclCmd/my.htm%|%official reference]: ** Description ** '''`my`''' invokes any method, including non-exported methods, defined by current object, i.e., the object that the method which calls `my` is bound to. `my` is actually a separate command that is created in each [oo::object%|%object%|%]'s namespace, so it can be invoked from outside the object if you know the name of the namespace or if you use [namespace code] inside the object to wrap the invocation. This is useful for callbacks like variable [trace]s or [bind] event handlers, and also for `[oo::objdefine] foward` and `[oo::define] forward`. ** Invoking without `my` ** '''[PYK] 2017-06-04:''' ====== proc oo::objdefine::baremethod {name args body} { set object [lindex [info level -1] 1] ::oo::objdefine $object [list method $name $args $body] proc [info object namespace $object]::$name args [ list ::tailcall my $name {*}$args] } ====== A simple example: ====== ::oo::object create o1 ::oo::objdefine o1 { baremethod m1 {} { puts {hello from m1} } baremethod m2 {} { m1 puts {hello from m2} } } o1 m2 ====== This works for object systems that use `[oo::copy]` and avoid `[oo::class]`. Doing the same for objects created via the `[oo::class]` mechanism is less feasible. <> Command | TclOO