nice idea, I've played a bit with var traces to make some tie functionality work; is this what you were thinking of?
--Uwe
####################################################### TIE code
Object instproc tie {varname objname} { my set $varname $objname my trace variable $varname wu "Object tie_cb $objname [self]" } Object proc tie_cb {tieobj obj n1 n2 mode} { ## delete the tieobj if {[my isobject $tieobj]} { $tieobj destroy } ## delete the trace for this tieobj if {$mode == "w" && [my isobject $obj]} { foreach t [$obj trace vinfo $n1] { set mode [lindex $t 0] set cmd [lindex $t 1] if {[string equal $cmd "Object tie_cb $tieobj $obj"]} { $obj trace vdelete $n1 $mode $cmd } } } }
####################################################### Test
Object x x proc test {} { set n 0 while {$n < 10} { my tie myVar [Object new] incr n } } x test
### test unset #x unset myVar #x set myVar abc
### only one should have survived puts [Object info instances]
### it gets killed when the obj gets killed x destroy puts [Object info instances]
###############################################################
On Friday 24 January 2003 04:32, Kristoffer Lawson wrote:
Been thinking if this would make sense:
while {$stuff} { tie myVar [MyClass new] ... }
And the instance created from MyClass would be automagically collected on each iteration. Ie. [tie] would tie an object to a variable: when the variable's value is changed, or when the variable is destroyed, the object is too -- or at least the refcount decreased. I often have Message objects which are used once (after some data is read from somewhere) and then destroyed. Quite often I forget the latter part ;-)
/ http://www.fishpool.com/~setok/
Xotcl mailing list - Xotcl@alice.wu-wien.ac.at http://alice.wu-wien.ac.at/mailman/listinfo/xotcl