Posted to tcl by bairui at Fri Apr 06 10:20:28 GMT 2018view pretty
#!/usr/bin/env tclsh namespace eval ::shadowdict { namespace export create namespace ensemble create proc create {var args} { upvar 1 $var d set ns [uplevel 1 namespace current]:: set d [::tcl::dict::create {*}$args] proc $ns$var {args} { set ns [uplevel 1 namespace current]:: set rest [lassign $args cmd] set d_var $ns[lindex [info level 0] 0] if {$cmd in {exists filter for get info \ keys map merge remove replace size values}} { upvar 1 $d_var d_val set d $d_val } else { set d $d_var } if {$cmd in {for map}} { set rest [lassign $rest varlist] dict $cmd $varlist $d {*}$rest } else { dict $cmd $d {*}$rest } } return $d } } namespace eval baz { set key foo set value bar shadowdict create d sim za d set $key $value d set bog buzz puts [d get $key] d for {k v} {puts "$k -> $v"} puts [d map {k v} {string length "$v"}] }