diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-09-16 09:41:02 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:52 +1000 |
commit | 2801904dafbac440eac1d833ef1594ca60771d9c (patch) | |
tree | 71ea8c13365b74510948d781f5219627ea11ca78 | |
parent | 77ebbb58cb33c0e37daef21baee7a06fe6ab49cb (diff) | |
download | jimtcl-2801904dafbac440eac1d833ef1594ca60771d9c.zip jimtcl-2801904dafbac440eac1d833ef1594ca60771d9c.tar.gz jimtcl-2801904dafbac440eac1d833ef1594ca60771d9c.tar.bz2 |
Add an optional 'putter' function to parray
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | examples/parray.tcl | 17 | ||||
-rw-r--r-- | tclcompat.tcl | 8 |
2 files changed, 22 insertions, 3 deletions
diff --git a/examples/parray.tcl b/examples/parray.tcl new file mode 100644 index 0000000..8ac5d3d --- /dev/null +++ b/examples/parray.tcl @@ -0,0 +1,17 @@ +# Example of using the 'putter' function to redirect parray output + +set a {1 one 2 two 3 three} + +# Use 'curry' to create a single command from two words +stderr puts "curry" +parray a * [curry stderr puts] + +# Same thing, but an alias instead +stderr puts "\nalias" +alias stderr_puts stderr puts +parray a * stderr_puts + +# Now use a lambda to accumulate the results in a buffer +stderr puts "\nlamba" +parray a * [lambda {msg} {lappend ::lines $msg}] +stderr puts [join $lines \n] diff --git a/tclcompat.tcl b/tclcompat.tcl index 5cf8e4c..6d8ccac 100644 --- a/tclcompat.tcl +++ b/tclcompat.tcl @@ -57,8 +57,10 @@ proc case {var args} { } } -# Optional argument is a glob pattern -proc parray {arrayname {pattern *}} { +# Second, option argument is a glob pattern +# Third, optional argument is a "putter" function +# +proc parray {arrayname {pattern *} {puts puts}} { upvar $arrayname a set max 0 @@ -70,7 +72,7 @@ proc parray {arrayname {pattern *}} { incr max [string length $arrayname] incr max 2 foreach name [lsort [array names a $pattern]] { - puts [format "%-${max}s = %s" $arrayname\($name\) $a($name)] + $puts [format "%-${max}s = %s" $arrayname\($name\) $a($name)] } } |