Provided by: tcl8.6-doc_8.6.10+dfsg-1_all bug


       oo::copy - create copies of objects and classes


       package require TclOO

       oo::copy sourceObject ?targetObject? ?targetNamespace?


       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 and targetNamespace which is the name of the namespace  that  will │
       hold the internal state of the object (my command, etc.); it must not refer to an existing │
       namespace.  If either targetObject or targetNamespace is omitted or is given as the  empty │
       string,  a new name is chosen. Names, unless specified, are chosen with the same algorithm │
       used by the new method of oo::class.  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


       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(3tcl), oo::define(3tcl), oo::object(3tcl)


       clone, copy, duplication, object