howl.aux.destructor(callback, ...)
returns an object, for which <callback> is called when it is collected
callback = Spy!
destructor callback
collectgarbage!
assert.is_true callback.called
passes any additional arguments given to the callback
callback = Spy!
destructor callback, 1, 'foo'
collectgarbage!
assert.same callback.called_with, { 1, 'foo' }
each destructor is unique
callback = Spy!
other_callback = Spy!
destructor callback
destructor other_callback
collectgarbage!
assert.is_true callback.called
assert.is_true other_callback.called
defuse() disables the destructor
callback = Spy!
d = destructor callback
d.defuse!
collectgarbage!
assert.is_false callback.called