Version 4 of info body

Updated 2006-09-22 14:04:50

info body procname

Returns the body of procedure procname. Procname must be the name of a Tcl procedure.

<jkock:2006-09-22> Note that if the proc has been imported from another namespace, then it is the body of that proc that is returned. This can lead to considerable confusion in relation with variable names, allowing a situation where a proc defined with the body returned from info body P will not behave in the same way as P itself!

Consider this example:

  namespace eval x {
      variable q 123
      proc ww {} {
          variable q
          return $q
      }
      namespace export ww
  }

  namespace eval i {
      variable q 456
      namespace import -force ::x::ww
  }

Now let us test the proc i::ww and see if we can understand it:

 % i::ww
 123
 % info body i::ww

     variable q
     return $q

 % set i::q
 456

Quite mysterious, if we didn't know that i::ww was defined by namespace import.

I don't know if this behaviour should be considered a bug, you just have to be careful, and always do namespace origin before doing info body...


wdb If you import a proc, it always "remembers" where it comes from. You can test it with namespace origin, here:

 % namespace origin ::i::ww
 ::x::ww

The imported proc ::i::ww behaves as a link to ::x::ww.

But, if you rename it to ::i::ww, then it really returns the value of ::i::q. So, since its behaviour is understood, it isn't strange any more, is it?


See also:


Category Command - Tcl syntax help