Richard Suchenwirth 2002-12-16 - Another thought experiment: how to implement variables with
procs. This is in fact trivial - here's how to set such a variable:
proc foo {} {return 42}
and it gets retrieved by bracketed call:
puts [foo]
Procedures have the property that their names are visible in (at least) the defining namespace without need for declaration like
global/
variable. The downside is that they stay persistent until
renamed away, while variables local to a procedure are automatically cleared up on
return.
If you wish, you can of course sugar-wrap the above raw calls into a
set look-alike:
proc setp {name args} {
switch [llength $args] {
0 {#fall through}
1 {proc $name {} [list return $args]}
default {error "usage: setp name ?value?"}
}
$name
}
% setp foo 42
42
% setp foo
42
See also
procs as data structures for un-callable procs, and
procs as objects for more complex state in procedures. The simple pattern above is sufficient for all values of a scalar variable.