Am 07.12.16 um 18:04 schrieb Joshua Root:

This is almost exactly the same situation as:

foreach foo {bar baz} {
    proc p_$foo {} {
        puts $foo
    }
}
p_bar
p_baz
you probably want the variable "foo" being substituted in the body of the
dynamically defined procs:

   % foreach foo {bar baz} {
       proc p_$foo {} [subst {
           puts "$foo"
       }]
   }

   % p_bar
   % p_baz

One might check the body of the dynamically defined proc via
"info body /procname/". This reveals that the quotes around
the argument of "puts" are necessary for cases, when e.g. the
value of the variable "foo" contains spaces.

   % info body p_bar

        puts "bar"
%

When the body contains content, which should not be substituted
(per default, "subst" performs variable, command and
backslash substitutions) use the proper flags for "subst"
or backslashes. e.g.:

   foreach foo {bar baz} {
       proc p_$foo {} [subst -nocommands {
           puts "$foo"
           return [string repeat "$foo " 10]
       }]
   }

   p_bar
   p_baz

Hope, this helps
-g

Reply via email to