code(n) | [incr Tcl] | code(n) |
code - capture the namespace context for a code fragment
itcl::code ?-namespace name? command ?arg arg ...?
Creates a scoped value for the specified command and its associated arg arguments. A scoped value is a list with three elements: the "@scope" keyword, a namespace context, and a value string. For example, the command
namespace foo { code puts "Hello World!" }
@scope ::foo {puts {Hello World!}}
Extensions like Tk execute ordinary code fragments in the global namespace. A scoped value captures a code fragment together with its namespace context in a way that allows it to be executed properly later. It is needed, for example, to wrap up code fragments when a Tk widget is used within a namespace:
namespace foo { private proc report {mesg} { puts "click: $mesg" } button .b1 -text "Push Me" -command [code report "Hello World!"] pack .b1 }
Also, note that the code command preserves the integrity of arguments on the command line. This makes it a natural replacement for the list command, which is often used to format Tcl code fragments. In other words, instead of using the list command like this:
after 1000 [list puts "Hello $name!"]
after 1000 [code puts "Hello $name!"]
Scoped commands can be invoked like ordinary code fragments, with or without the eval command. For example, the following statements work properly:
set cmd {@scope ::foo .b1} $cmd configure -background red set opts {-bg blue -fg white} eval $cmd configure $opts
@scope ::foo {report {Hello World!}}
scope, callback, namespace, public, protected, private
3.0 | itcl |