TclOO Package

Hex Artifact Content
Login
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2018 Conference, Houston/TX, US, Oct 15-19
Send your abstracts to tclconference@googlegroups.com
or submit via the online form by Aug 20.

Artifact 9760bede06607e7bcc83dd18f738136143ac8205:

Wiki page [Doc: oo::copy] by dkf 2016-09-17 11:48:49.
0000: 44 20 32 30 31 36 2d 30 39 2d 31 37 54 31 31 3a  D 2016-09-17T11:
0010: 34 38 3a 34 39 2e 38 37 34 0a 4c 20 44 6f 63 3a  48:49.874.L Doc:
0020: 5c 73 6f 6f 3a 3a 63 6f 70 79 0a 4e 20 74 65 78  \soo::copy.N tex
0030: 74 2f 78 2d 6d 61 72 6b 64 6f 77 6e 0a 55 20 64  t/x-markdown.U d
0040: 6b 66 0a 57 20 32 35 33 34 0a 3c 68 31 3e 6f 6f  kf.W 2534.<h1>oo
0050: 3a 3a 63 6f 70 79 3c 68 31 3e 0d 0a 3c 48 33 3e  ::copy<h1>..<H3>
0060: 3c 41 20 4e 41 4d 45 3d 22 4d 32 22 3e 4e 41 4d  <A NAME="M2">NAM
0070: 45 3c 2f 41 3e 3c 2f 48 33 3e 0d 0a 3c 62 3e 6f  E</A></H3>..<b>o
0080: 6f 3a 3a 63 6f 70 79 3c 2f 62 3e 20 26 6d 64 61  o::copy</b> &mda
0090: 73 68 3b 20 63 72 65 61 74 65 20 63 6f 70 69 65  sh; create copie
00a0: 73 20 6f 66 20 6f 62 6a 65 63 74 73 20 61 6e 64  s of objects and
00b0: 20 63 6c 61 73 73 65 73 0d 0a 3c 48 33 3e 3c 41   classes..<H3><A
00c0: 20 4e 41 4d 45 3d 22 4d 33 22 3e 53 59 4e 4f 50   NAME="M3">SYNOP
00d0: 53 49 53 3c 2f 41 3e 3c 2f 48 33 3e 0d 0a 70 61  SIS</A></H3>..pa
00e0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 54 63  ckage require Tc
00f0: 6c 4f 4f 3c 42 52 3e 0d 0a 3c 42 52 3e 0d 0a 3c  lOO<BR>..<BR>..<
0100: 42 3e 6f 6f 3a 3a 63 6f 70 79 3c 2f 42 3e 3c 49  B>oo::copy</B><I
0110: 3e 20 73 6f 75 72 63 65 4f 62 6a 65 63 74 20 3c  > sourceObject <
0120: 2f 49 3e 3f 3c 49 3e 74 61 72 67 65 74 4f 62 6a  /I>?<I>targetObj
0130: 65 63 74 3c 2f 49 3e 3f 3c 42 52 3e 0d 0a 3c 48  ect</I>?<BR>..<H
0140: 33 3e 3c 41 20 4e 41 4d 45 3d 22 4d 34 22 3e 44  3><A NAME="M4">D
0150: 45 53 43 52 49 50 54 49 4f 4e 3c 2f 41 3e 3c 2f  ESCRIPTION</A></
0160: 48 33 3e 0d 0a 54 68 65 20 3c 42 3e 6f 6f 3a 3a  H3>..The <B>oo::
0170: 63 6f 70 79 3c 2f 42 3e 20 63 6f 6d 6d 61 6e 64  copy</B> command
0180: 20 63 72 65 61 74 65 73 20 61 20 63 6f 70 79 20   creates a copy 
0190: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 6f 72 20  of an object or 
01a0: 63 6c 61 73 73 2e 20 49 74 20 74 61 6b 65 73 20  class. It takes 
01b0: 74 68 65 0d 0a 6e 61 6d 65 20 6f 66 20 74 68 65  the..name of the
01c0: 20 6f 62 6a 65 63 74 20 6f 72 20 63 6c 61 73 73   object or class
01d0: 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 3c   to be copied, <
01e0: 49 3e 73 6f 75 72 63 65 4f 62 6a 65 63 74 3c 2f  I>sourceObject</
01f0: 49 3e 2c 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c  I>, and optional
0200: 6c 79 0d 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20  ly..the name of 
0210: 74 68 65 20 6f 62 6a 65 63 74 20 6f 72 20 63 6c  the object or cl
0220: 61 73 73 20 74 6f 20 63 72 65 61 74 65 2c 20 3c  ass to create, <
0230: 49 3e 74 61 72 67 65 74 4f 62 6a 65 63 74 3c 2f  I>targetObject</
0240: 49 3e 2c 20 77 68 69 63 68 20 77 69 6c 6c 20 62  I>, which will b
0250: 65 0d 0a 72 65 73 6f 6c 76 65 64 20 72 65 6c 61  e..resolved rela
0260: 74 69 76 65 20 74 6f 20 74 68 65 20 63 75 72 72  tive to the curr
0270: 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 20 69 66  ent namespace if
0280: 20 6e 6f 74 20 61 6e 20 61 62 73 6f 6c 75 74 65   not an absolute
0290: 20 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 2e   qualified name.
02a0: 0d 0a 49 66 20 3c 49 3e 74 61 72 67 65 74 4f 62  ..If <I>targetOb
02b0: 6a 65 63 74 3c 2f 49 3e 20 69 73 20 6f 6d 69 74  ject</I> is omit
02c0: 74 65 64 2c 20 61 20 6e 65 77 20 6e 61 6d 65 20  ted, a new name 
02d0: 69 73 20 63 68 6f 73 65 6e 2e 20 54 68 65 20 63  is chosen. The c
02e0: 6f 70 69 65 64 20 6f 62 6a 65 63 74 20 77 69 6c  opied object wil
02f0: 6c 0d 0a 62 65 20 6f 66 20 74 68 65 20 73 61 6d  l..be of the sam
0300: 65 20 63 6c 61 73 73 20 61 73 20 74 68 65 20 73  e class as the s
0310: 6f 75 72 63 65 20 6f 62 6a 65 63 74 2c 20 61 6e  ource object, an
0320: 64 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 6c 20  d will have all 
0330: 69 74 73 20 70 65 72 2d 6f 62 6a 65 63 74 0d 0a  its per-object..
0340: 6d 65 74 68 6f 64 73 20 63 6f 70 69 65 64 2e 20  methods copied. 
0350: 49 66 20 69 74 20 69 73 20 61 20 63 6c 61 73 73  If it is a class
0360: 2c 20 69 74 20 77 69 6c 6c 20 61 6c 73 6f 20 68  , it will also h
0370: 61 76 65 20 61 6c 6c 20 74 68 65 20 63 6c 61 73  ave all the clas
0380: 73 20 6d 65 74 68 6f 64 73 20 69 6e 0d 0a 74 68  s methods in..th
0390: 65 20 63 6c 61 73 73 20 63 6f 70 69 65 64 2c 20  e class copied, 
03a0: 62 75 74 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20  but it will not 
03b0: 68 61 76 65 20 61 6e 79 20 6f 66 20 69 74 73 20  have any of its 
03c0: 69 6e 73 74 61 6e 63 65 73 20 63 6f 70 69 65 64  instances copied
03d0: 2e 0d 0a 3c 50 3e 0d 0a 41 66 74 65 72 20 74 68  ...<P>..After th
03e0: 65 20 3c 49 3e 74 61 72 67 65 74 4f 62 6a 65 63  e <I>targetObjec
03f0: 74 3c 2f 49 3e 20 68 61 73 20 62 65 65 6e 20 63  t</I> has been c
0400: 72 65 61 74 65 64 20 61 6e 64 20 61 6c 6c 20 64  reated and all d
0410: 65 66 69 6e 69 74 69 6f 6e 73 20 6f 66 20 69 74  efinitions of it
0420: 73 0d 0a 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  s..configuration
0430: 20 28 65 2e 67 2e 2c 20 6d 65 74 68 6f 64 73 2c   (e.g., methods,
0440: 20 66 69 6c 74 65 72 73 2c 20 6d 69 78 69 6e 73   filters, mixins
0450: 29 20 63 6f 70 69 65 64 2c 20 74 68 65 20 3c 42  ) copied, the <B
0460: 3e 26 6c 74 3b 63 6c 6f 6e 65 64 26 67 74 3b 3c  >&lt;cloned&gt;<
0470: 2f 42 3e 0d 0a 6d 65 74 68 6f 64 20 6f 66 20 3c  /B>..method of <
0480: 49 3e 74 61 72 67 65 74 4f 62 6a 65 63 74 3c 2f  I>targetObject</
0490: 49 3e 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  I> will be invok
04a0: 65 64 2c 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72  ed, to allow for
04b0: 20 63 75 73 74 6f 6d 69 7a 61 74 69 6f 6e 20 6f   customization o
04c0: 66 0d 0a 74 68 65 20 63 72 65 61 74 65 64 20 6f  f..the created o
04d0: 62 6a 65 63 74 20 73 75 63 68 20 61 73 20 69 6e  bject such as in
04e0: 73 74 61 6c 6c 69 6e 67 20 72 65 6c 61 74 65 64  stalling related
04f0: 20 76 61 72 69 61 62 6c 65 20 74 72 61 63 65 73   variable traces
0500: 2e 20 54 68 65 20 6f 6e 6c 79 0d 0a 61 72 67 75  . The only..argu
0510: 6d 65 6e 74 20 67 69 76 65 6e 20 77 69 6c 6c 20  ment given will 
0520: 62 65 20 3c 49 3e 73 6f 75 72 63 65 4f 62 6a 65  be <I>sourceObje
0530: 63 74 3c 2f 49 3e 2e 20 54 68 65 20 64 65 66 61  ct</I>. The defa
0540: 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ult implementati
0550: 6f 6e 20 6f 66 20 74 68 69 73 0d 0a 6d 65 74 68  on of this..meth
0560: 6f 64 20 28 69 6e 20 3c 42 3e 3c 41 20 48 52 45  od (in <B><A HRE
0570: 46 3d 22 3f 6e 61 6d 65 3d 44 6f 63 3a 2b 6f 6f  F="?name=Doc:+oo
0580: 3a 3a 6f 62 6a 65 63 74 22 3e 6f 6f 3a 3a 6f 62  ::object">oo::ob
0590: 6a 65 63 74 3c 2f 41 3e 3c 2f 42 3e 29 20 6a 75  ject</A></B>) ju
05a0: 73 74 20 63 6f 70 69 65 73 20 74 68 65 20 70 72  st copies the pr
05b0: 6f 63 65 64 75 72 65 73 20 61 6e 64 20 76 61 72  ocedures and var
05c0: 69 61 62 6c 65 73 20 69 6e 20 74 68 65 0d 0a 6e  iables in the..n
05d0: 61 6d 65 73 70 61 63 65 20 6f 66 20 3c 49 3e 73  amespace of <I>s
05e0: 6f 75 72 63 65 4f 62 6a 65 63 74 3c 2f 49 3e 20  ourceObject</I> 
05f0: 74 6f 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65  to the namespace
0600: 20 6f 66 20 3c 49 3e 74 61 72 67 65 74 4f 62 6a   of <I>targetObj
0610: 65 63 74 3c 2f 49 3e 2e 20 49 66 0d 0a 74 68 69  ect</I>. If..thi
0620: 73 20 6d 65 74 68 6f 64 20 63 61 6c 6c 20 64 6f  s method call do
0630: 65 73 20 6e 6f 74 20 72 65 74 75 72 6e 20 61 20  es not return a 
0640: 72 65 73 75 6c 74 20 74 68 61 74 20 69 73 20 73  result that is s
0650: 75 63 63 65 73 73 66 75 6c 20 28 69 2e 65 2e 2c  uccessful (i.e.,
0660: 20 61 6e 20 65 72 72 6f 72 0d 0a 6f 72 20 6f 74   an error..or ot
0670: 68 65 72 20 6b 69 6e 64 20 6f 66 20 65 78 63 65  her kind of exce
0680: 70 74 69 6f 6e 29 20 74 68 65 6e 20 74 68 65 20  ption) then the 
0690: 3c 49 3e 74 61 72 67 65 74 4f 62 6a 65 63 74 3c  <I>targetObject<
06a0: 2f 49 3e 20 77 69 6c 6c 20 62 65 20 64 65 6c 65  /I> will be dele
06b0: 74 65 64 20 61 6e 64 20 61 6e 0d 0a 65 72 72 6f  ted and an..erro
06c0: 72 20 72 65 74 75 72 6e 65 64 2e 0d 0a 3c 50 3e  r returned...<P>
06d0: 0d 0a 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  ..The result of 
06e0: 74 68 65 20 3c 42 3e 6f 6f 3a 3a 63 6f 70 79 3c  the <B>oo::copy<
06f0: 2f 42 3e 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  /B> command will
0700: 20 62 65 20 74 68 65 20 66 75 6c 6c 79 2d 71 75   be the fully-qu
0710: 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 0d  alified name of.
0720: 0a 74 68 65 20 6e 65 77 20 6f 62 6a 65 63 74 20  .the new object 
0730: 6f 72 20 63 6c 61 73 73 2e 0d 0a 3c 48 33 3e 3c  or class...<H3><
0740: 41 20 4e 41 4d 45 3d 22 4d 35 22 3e 45 58 41 4d  A NAME="M5">EXAM
0750: 50 4c 45 53 3c 2f 41 3e 3c 2f 48 33 3e 0d 0a 54  PLES</A></H3>..T
0760: 68 69 73 20 65 78 61 6d 70 6c 65 20 63 72 65 61  his example crea
0770: 74 65 73 20 61 6e 20 6f 62 6a 65 63 74 2c 20 63  tes an object, c
0780: 6f 70 69 65 73 20 69 74 2c 20 6d 6f 64 69 66 69  opies it, modifi
0790: 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 6f 62  es the source ob
07a0: 6a 65 63 74 2c 20 61 6e 64 0d 0a 74 68 65 6e 20  ject, and..then 
07b0: 64 65 6d 6f 6e 73 74 72 61 74 65 73 20 74 68 61  demonstrates tha
07c0: 74 20 74 68 65 20 63 6f 70 69 65 64 20 6f 62 6a  t the copied obj
07d0: 65 63 74 20 69 73 20 69 6e 64 65 65 64 20 61 20  ect is indeed a 
07e0: 63 6f 70 79 2e 0d 0a 3c 50 3e 0d 0a 3c 50 52 45  copy...<P>..<PRE
07f0: 3e 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63 72 65 61  >oo::object crea
0800: 74 65 20 73 72 63 0d 0a 6f 6f 3a 3a 6f 62 6a 64  te src..oo::objd
0810: 65 66 69 6e 65 20 73 72 63 20 6d 65 74 68 6f 64  efine src method
0820: 20 6d 73 67 20 7b 7d 20 7b 70 75 74 73 20 66 6f   msg {} {puts fo
0830: 6f 7d 0d 0a 3c 42 3e 6f 6f 3a 3a 63 6f 70 79 3c  o}..<B>oo::copy<
0840: 2f 42 3e 20 73 72 63 20 64 73 74 0d 0a 6f 6f 3a  /B> src dst..oo:
0850: 3a 6f 62 6a 64 65 66 69 6e 65 20 73 72 63 20 6d  :objdefine src m
0860: 65 74 68 6f 64 20 6d 73 67 20 7b 7d 20 7b 70 75  ethod msg {} {pu
0870: 74 73 20 62 61 72 7d 0d 0a 73 72 63 20 6d 73 67  ts bar}..src msg
0880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 49                <I
0890: 3e 3c 66 6f 6e 74 20 73 69 7a 65 3d 22 2b 31 22  ><font size="+1"
08a0: 3e 26 23 38 35 39 34 3b 3c 2f 66 6f 6e 74 3e 20  >&#8594;</font> 
08b0: 70 72 69 6e 74 73 20 26 71 75 6f 74 3b 62 61 72  prints &quot;bar
08c0: 26 71 75 6f 74 3b 3c 2f 49 3e 0d 0a 64 73 74 20  &quot;</I>..dst 
08d0: 6d 73 67 20 20 20 20 20 20 20 20 20 20 20 20 20  msg             
08e0: 20 3c 49 3e 3c 66 6f 6e 74 20 73 69 7a 65 3d 22   <I><font size="
08f0: 2b 31 22 3e 26 23 38 35 39 34 3b 3c 2f 66 6f 6e  +1">&#8594;</fon
0900: 74 3e 20 70 72 69 6e 74 73 20 26 71 75 6f 74 3b  t> prints &quot;
0910: 66 6f 6f 26 71 75 6f 74 3b 3c 2f 49 3e 3c 2f 50  foo&quot;</I></P
0920: 52 45 3e 0d 0a 3c 48 33 3e 3c 41 20 4e 41 4d 45  RE>..<H3><A NAME
0930: 3d 22 4d 36 22 3e 53 45 45 20 41 4c 53 4f 3c 2f  ="M6">SEE ALSO</
0940: 41 3e 3c 2f 48 33 3e 0d 0a 3c 42 3e 3c 41 20 48  A></H3>..<B><A H
0950: 52 45 46 3d 22 3f 6e 61 6d 65 3d 44 6f 63 3a 2b  REF="?name=Doc:+
0960: 6f 6f 3a 3a 63 6c 61 73 73 22 3e 6f 6f 3a 3a 63  oo::class">oo::c
0970: 6c 61 73 73 3c 2f 41 3e 3c 2f 42 3e 2c 20 3c 42  lass</A></B>, <B
0980: 3e 3c 41 20 48 52 45 46 3d 22 3f 6e 61 6d 65 3d  ><A HREF="?name=
0990: 44 6f 63 3a 2b 6f 6f 3a 3a 64 65 66 69 6e 65 22  Doc:+oo::define"
09a0: 3e 6f 6f 3a 3a 64 65 66 69 6e 65 3c 2f 41 3e 3c  >oo::define</A><
09b0: 2f 42 3e 2c 20 3c 42 3e 3c 41 20 48 52 45 46 3d  /B>, <B><A HREF=
09c0: 22 3f 6e 61 6d 65 3d 44 6f 63 3a 2b 6f 6f 3a 3a  "?name=Doc:+oo::
09d0: 6f 62 6a 65 63 74 22 3e 6f 6f 3a 3a 6f 62 6a 65  object">oo::obje
09e0: 63 74 3c 2f 41 3e 3c 2f 42 3e 0d 0a 3c 48 33 3e  ct</A></B>..<H3>
09f0: 3c 41 20 4e 41 4d 45 3d 22 4d 37 22 3e 4b 45 59  <A NAME="M7">KEY
0a00: 57 4f 52 44 53 3c 2f 41 3e 3c 2f 48 33 3e 0d 0a  WORDS</A></H3>..
0a10: 63 6c 6f 6e 65 2c 20 63 6f 70 79 2c 20 64 75 70  clone, copy, dup
0a20: 6c 69 63 61 74 69 6f 6e 2c 20 6f 62 6a 65 63 74  lication, object
0a30: 0a 5a 20 61 35 33 64 38 61 37 63 38 34 38 63 63  .Z a53d8a7c848cc
0a40: 32 33 30 34 62 34 63 31 62 38 37 38 35 66 30 32  2304b4c1b8785f02
0a50: 61 37 30 0a                                      a70.