oo::copy — create copies of objects and classes
package require TclOO
oo::copy sourceObject ?targetObject?
The oo::copy command creates a copy of an object or class. It takes the
name of the object or class to be copied, sourceObject, and optionally
the name of the object or class to create, targetObject, which will be
resolved relative to the current namespace if not an absolute qualified name.
If targetObject is omitted, a new name is chosen. The copied object will
be of the same class as the source object, and will have all its per-object
methods copied. If it is a class, it will also have all the class methods in
the class copied, but it will not have any of its instances copied.
After the targetObject has been created and all definitions of its
configuration (e.g., methods, filters, mixins) copied, the <cloned>
method of targetObject will be invoked, to allow for customization of
the created object such as installing related variable traces. The only
argument given will be sourceObject. The default implementation of this
method (in oo::object) just copies the procedures and variables in the
namespace of sourceObject to the namespace of targetObject. If
this method call does not return a result that is successful (i.e., an error
or other kind of exception) then the targetObject will be deleted and an
error returned.
The result of the oo::copy command will be the fully-qualified name of
the new object or class.
This example creates an object, copies it, modifies the source object, and
then demonstrates that the copied object is indeed a copy.
oo::object create src
oo::objdefine src method msg {} {puts foo}
oo::copy src dst
oo::objdefine src method msg {} {puts bar}
src msg → prints "bar"
dst msg → prints "foo"
oo::class, oo::define, oo::object
clone, copy, duplication, object
Copyright © 2007 Donal K. Fellows