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