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 5055b0e997aa1669749a5c9a11f57872e387e753:

Wiki page [Doc: next] by dkf 2016-09-17 11:45:03.
0000: 44 20 32 30 31 36 2d 30 39 2d 31 37 54 31 31 3a  D 2016-09-17T11:
0010: 34 35 3a 30 33 2e 35 36 35 0a 4c 20 44 6f 63 3a  45:03.565.L Doc:
0020: 5c 73 6e 65 78 74 0a 4e 20 74 65 78 74 2f 78 2d  \snext.N text/x-
0030: 6d 61 72 6b 64 6f 77 6e 0a 55 20 64 6b 66 0a 57  markdown.U dkf.W
0040: 20 39 30 38 38 0a 3c 68 31 3e 6e 65 78 74 20 61   9088.<h1>next a
0050: 6e 64 20 6e 65 78 74 74 6f 3c 2f 68 31 3e 0d 0a  nd nextto</h1>..
0060: 3c 44 4c 20 73 74 79 6c 65 3d 22 66 6f 6e 74 2d  <DL style="font-
0070: 73 69 7a 65 3a 2e 38 35 65 6d 22 3e 0d 0a 3c 44  size:.85em">..<D
0080: 44 3e 3c 41 20 48 52 45 46 3d 22 23 4d 32 22 20  D><A HREF="#M2" 
0090: 4e 41 4d 45 3d 22 4c 31 32 36 32 22 3e 4e 41 4d  NAME="L1262">NAM
00a0: 45 3c 2f 41 3e 0d 0a 3c 44 4c 3e 3c 44 44 3e 6e  E</A>..<DL><DD>n
00b0: 65 78 74 2c 20 6e 65 78 74 74 6f 20 26 6d 64 61  ext, nextto &mda
00c0: 73 68 3b 20 69 6e 76 6f 6b 65 20 73 75 70 65 72  sh; invoke super
00d0: 63 6c 61 73 73 20 6d 65 74 68 6f 64 20 69 6d 70  class method imp
00e0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 3c 2f 44 44  lementations</DD
00f0: 3e 3c 2f 44 4c 3e 0d 0a 3c 44 44 3e 3c 41 20 48  ></DL>..<DD><A H
0100: 52 45 46 3d 22 23 4d 33 22 20 4e 41 4d 45 3d 22  REF="#M3" NAME="
0110: 4c 31 32 36 33 22 3e 53 59 4e 4f 50 53 49 53 3c  L1263">SYNOPSIS<
0120: 2f 41 3e 0d 0a 3c 44 4c 3e 0d 0a 3c 2f 44 4c 3e  /A>..<DL>..</DL>
0130: 0d 0a 3c 44 44 3e 3c 41 20 48 52 45 46 3d 22 23  ..<DD><A HREF="#
0140: 4d 34 22 20 4e 41 4d 45 3d 22 4c 31 32 36 34 22  M4" NAME="L1264"
0150: 3e 44 45 53 43 52 49 50 54 49 4f 4e 3c 2f 41 3e  >DESCRIPTION</A>
0160: 0d 0a 3c 44 44 3e 3c 41 20 48 52 45 46 3d 22 23  ..<DD><A HREF="#
0170: 4d 35 22 20 4e 41 4d 45 3d 22 4c 31 32 36 35 22  M5" NAME="L1265"
0180: 3e 54 48 45 20 4d 45 54 48 4f 44 20 43 48 41 49  >THE METHOD CHAI
0190: 4e 3c 2f 41 3e 0d 0a 3c 4f 4c 20 63 6c 61 73 73  N</A>..<OL class
01a0: 3d 22 74 68 65 20 6d 65 74 68 6f 64 20 63 68 61  ="the method cha
01b0: 69 6e 22 3e 0d 0a 3c 2f 4f 4c 3e 0d 0a 3c 44 44  in">..</OL>..<DD
01c0: 3e 3c 41 20 48 52 45 46 3d 22 23 4d 36 22 20 4e  ><A HREF="#M6" N
01d0: 41 4d 45 3d 22 4c 31 32 36 36 22 3e 4d 45 54 48  AME="L1266">METH
01e0: 4f 44 20 53 45 41 52 43 48 20 4f 52 44 45 52 3c  OD SEARCH ORDER<
01f0: 2f 41 3e 0d 0a 3c 4f 4c 20 63 6c 61 73 73 3d 22  /A>..<OL class="
0200: 6d 65 74 68 6f 64 20 73 65 61 72 63 68 20 6f 72  method search or
0210: 64 65 72 22 3e 0d 0a 3c 2f 4f 4c 3e 0d 0a 3c 44  der">..</OL>..<D
0220: 44 3e 3c 41 20 48 52 45 46 3d 22 23 4d 37 22 20  D><A HREF="#M7" 
0230: 4e 41 4d 45 3d 22 4c 31 32 36 37 22 3e 46 49 4c  NAME="L1267">FIL
0240: 54 45 52 53 3c 2f 41 3e 0d 0a 3c 44 44 3e 3c 41  TERS</A>..<DD><A
0250: 20 48 52 45 46 3d 22 23 4d 38 22 20 4e 41 4d 45   HREF="#M8" NAME
0260: 3d 22 4c 31 32 36 38 22 3e 45 58 41 4d 50 4c 45  ="L1268">EXAMPLE
0270: 53 3c 2f 41 3e 0d 0a 3c 44 44 3e 3c 41 20 48 52  S</A>..<DD><A HR
0280: 45 46 3d 22 23 4d 39 22 20 4e 41 4d 45 3d 22 4c  EF="#M9" NAME="L
0290: 31 32 36 39 22 3e 53 45 45 20 41 4c 53 4f 3c 2f  1269">SEE ALSO</
02a0: 41 3e 0d 0a 3c 44 44 3e 3c 41 20 48 52 45 46 3d  A>..<DD><A HREF=
02b0: 22 23 4d 31 30 22 20 4e 41 4d 45 3d 22 4c 31 32  "#M10" NAME="L12
02c0: 37 30 22 3e 4b 45 59 57 4f 52 44 53 3c 2f 41 3e  70">KEYWORDS</A>
02d0: 0d 0a 3c 2f 44 4c 3e 0d 0a 3c 48 33 3e 3c 41 20  ..</DL>..<H3><A 
02e0: 4e 41 4d 45 3d 22 4d 32 22 3e 4e 41 4d 45 3c 2f  NAME="M2">NAME</
02f0: 41 3e 3c 2f 48 33 3e 0d 0a 3c 62 3e 6e 65 78 74  A></H3>..<b>next
0300: 3c 2f 62 3e 2c 20 3c 62 3e 6e 65 78 74 74 6f 3c  </b>, <b>nextto<
0310: 2f 62 3e 20 26 6d 64 61 73 68 3b 20 69 6e 76 6f  /b> &mdash; invo
0320: 6b 65 20 73 75 70 65 72 63 6c 61 73 73 20 6d 65  ke superclass me
0330: 74 68 6f 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74  thod implementat
0340: 69 6f 6e 73 0d 0a 3c 48 33 3e 3c 41 20 4e 41 4d  ions..<H3><A NAM
0350: 45 3d 22 4d 33 22 3e 53 59 4e 4f 50 53 49 53 3c  E="M3">SYNOPSIS<
0360: 2f 41 3e 3c 2f 48 33 3e 0d 0a 70 61 63 6b 61 67  /A></H3>..packag
0370: 65 20 72 65 71 75 69 72 65 20 54 63 6c 4f 4f 3c  e require TclOO<
0380: 42 52 3e 0d 0a 3c 42 52 3e 0d 0a 3c 42 3e 6e 65  BR>..<BR>..<B>ne
0390: 78 74 3c 2f 42 3e 20 3f 3c 49 3e 61 72 67 20 2e  xt</B> ?<I>arg .
03a0: 2e 2e 3c 2f 49 3e 3f 3c 42 52 3e 0d 0a 3c 42 3e  ..</I>?<BR>..<B>
03b0: 6e 65 78 74 74 6f 3c 2f 42 3e 3c 49 3e 20 63 6c  nextto</B><I> cl
03c0: 61 73 73 3c 2f 49 3e 20 3f 3c 49 3e 61 72 67 20  ass</I> ?<I>arg 
03d0: 2e 2e 2e 3c 2f 49 3e 3f 3c 42 52 3e 0d 0a 3c 48  ...</I>?<BR>..<H
03e0: 33 3e 3c 41 20 4e 41 4d 45 3d 22 4d 34 22 3e 44  3><A NAME="M4">D
03f0: 45 53 43 52 49 50 54 49 4f 4e 3c 2f 41 3e 3c 2f  ESCRIPTION</A></
0400: 48 33 3e 0d 0a 54 68 65 20 3c 42 3e 6e 65 78 74  H3>..The <B>next
0410: 3c 2f 42 3e 20 63 6f 6d 6d 61 6e 64 20 69 73 20  </B> command is 
0420: 75 73 65 64 20 74 6f 20 63 61 6c 6c 20 69 6d 70  used to call imp
0430: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20  lementations of 
0440: 61 20 6d 65 74 68 6f 64 20 62 79 20 61 20 63 6c  a method by a cl
0450: 61 73 73 2c 0d 0a 73 75 70 65 72 63 6c 61 73 73  ass,..superclass
0460: 20 6f 72 20 6d 69 78 69 6e 20 74 68 61 74 20 61   or mixin that a
0470: 72 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79  re overridden by
0480: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 65 74   the current met
0490: 68 6f 64 2e 20 49 74 20 63 61 6e 20 6f 6e 6c 79  hod. It can only
04a0: 20 62 65 0d 0a 75 73 65 64 20 66 72 6f 6d 20 77   be..used from w
04b0: 69 74 68 69 6e 20 61 20 6d 65 74 68 6f 64 2e 20  ithin a method. 
04c0: 49 74 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20  It is also used 
04d0: 77 69 74 68 69 6e 20 66 69 6c 74 65 72 73 20 74  within filters t
04e0: 6f 20 69 6e 64 69 63 61 74 65 20 74 68 65 0d 0a  o indicate the..
04f0: 70 6f 69 6e 74 20 77 68 65 72 65 20 61 20 66 69  point where a fi
0500: 6c 74 65 72 20 63 61 6c 6c 73 20 74 68 65 20 61  lter calls the a
0510: 63 74 75 61 6c 20 69 6d 70 6c 65 6d 65 6e 74 61  ctual implementa
0520: 74 69 6f 6e 20 28 74 68 65 20 66 69 6c 74 65 72  tion (the filter
0530: 20 6d 61 79 20 64 65 63 69 64 65 20 74 6f 0d 0a   may decide to..
0540: 6e 6f 74 20 67 6f 20 61 6c 6f 6e 67 20 74 68 65  not go along the
0550: 20 63 68 61 69 6e 2c 20 61 6e 64 20 6d 61 79 20   chain, and may 
0560: 70 72 6f 63 65 73 73 20 74 68 65 20 72 65 73 75  process the resu
0570: 6c 74 73 20 6f 66 20 67 6f 69 6e 67 20 61 6c 6f  lts of going alo
0580: 6e 67 20 74 68 65 20 63 68 61 69 6e 0d 0a 6f 66  ng the chain..of
0590: 20 6d 65 74 68 6f 64 73 20 61 73 20 69 74 20 63   methods as it c
05a0: 68 6f 6f 73 65 73 29 2e 20 54 68 65 20 72 65 73  hooses). The res
05b0: 75 6c 74 20 6f 66 20 74 68 65 20 3c 42 3e 6e 65  ult of the <B>ne
05c0: 78 74 3c 2f 42 3e 20 63 6f 6d 6d 61 6e 64 20 69  xt</B> command i
05d0: 73 20 74 68 65 20 72 65 73 75 6c 74 0d 0a 6f 66  s the result..of
05e0: 20 74 68 65 20 6e 65 78 74 20 6d 65 74 68 6f 64   the next method
05f0: 20 69 6e 20 74 68 65 20 6d 65 74 68 6f 64 20 63   in the method c
0600: 68 61 69 6e 3b 20 69 66 20 74 68 65 72 65 20 61  hain; if there a
0610: 72 65 20 6e 6f 20 66 75 72 74 68 65 72 20 6d 65  re no further me
0620: 74 68 6f 64 73 20 69 6e 20 74 68 65 0d 0a 6d 65  thods in the..me
0630: 74 68 6f 64 20 63 68 61 69 6e 2c 20 74 68 65 20  thod chain, the 
0640: 72 65 73 75 6c 74 20 6f 66 20 3c 42 3e 6e 65 78  result of <B>nex
0650: 74 3c 2f 42 3e 20 77 69 6c 6c 20 62 65 20 61 6e  t</B> will be an
0660: 20 65 72 72 6f 72 2e 20 54 68 65 20 61 72 67 75   error. The argu
0670: 6d 65 6e 74 73 2c 0d 0a 3c 49 3e 61 72 67 3c 2f  ments,..<I>arg</
0680: 49 3e 2c 20 74 6f 20 3c 42 3e 6e 65 78 74 3c 2f  I>, to <B>next</
0690: 42 3e 20 61 72 65 20 74 68 65 20 61 72 67 75 6d  B> are the argum
06a0: 65 6e 74 73 20 74 6f 20 70 61 73 73 20 74 6f 20  ents to pass to 
06b0: 74 68 65 20 6e 65 78 74 20 6d 65 74 68 6f 64 20  the next method 
06c0: 69 6e 20 74 68 65 0d 0a 63 68 61 69 6e 2e 0d 0a  in the..chain...
06d0: 3c 50 3e 0d 0a 54 68 65 20 3c 42 3e 6e 65 78 74  <P>..The <B>next
06e0: 74 6f 3c 2f 42 3e 20 63 6f 6d 6d 61 6e 64 20 69  to</B> command i
06f0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
0700: 65 20 3c 42 3e 6e 65 78 74 3c 2f 42 3e 20 63 6f  e <B>next</B> co
0710: 6d 6d 61 6e 64 2c 20 65 78 63 65 70 74 20 74 68  mmand, except th
0720: 61 74 20 69 74 0d 0a 74 61 6b 65 73 20 61 6e 20  at it..takes an 
0730: 61 64 64 69 74 69 6f 6e 61 6c 20 3c 49 3e 63 6c  additional <I>cl
0740: 61 73 73 3c 2f 49 3e 20 61 72 67 75 6d 65 6e 74  ass</I> argument
0750: 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73   that identifies
0760: 20 61 20 63 6c 61 73 73 20 77 68 6f 73 65 0d 0a   a class whose..
0770: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
0780: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 65  f the current me
0790: 74 68 6f 64 20 63 68 61 69 6e 20 28 73 65 65 20  thod chain (see 
07a0: 3c 42 3e 3c 41 20 48 52 45 46 3d 22 2e 2e 2f 54  <B><A HREF="../T
07b0: 63 6c 43 6d 64 2f 69 6e 66 6f 2e 68 74 6d 22 3e  clCmd/info.htm">
07c0: 69 6e 66 6f 20 6f 62 6a 65 63 74 3c 2f 41 3e 3c  info object</A><
07d0: 2f 42 3e 20 3c 42 3e 63 61 6c 6c 3c 2f 42 3e 29  /B> <B>call</B>)
07e0: 20 73 68 6f 75 6c 64 0d 0a 62 65 20 75 73 65 64   should..be used
07f0: 3b 20 74 68 65 20 6d 65 74 68 6f 64 20 69 6d 70  ; the method imp
0800: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 65 6c 65  lementation sele
0810: 63 74 65 64 20 77 69 6c 6c 20 62 65 20 74 68 65  cted will be the
0820: 20 6f 6e 65 20 70 72 6f 76 69 64 65 64 20 62 79   one provided by
0830: 20 74 68 65 0d 0a 67 69 76 65 6e 20 63 6c 61 73   the..given clas
0840: 73 2c 20 61 6e 64 20 69 74 20 6d 75 73 74 20 72  s, and it must r
0850: 65 66 65 72 20 74 6f 20 61 6e 20 65 78 69 73 74  efer to an exist
0860: 69 6e 67 20 6e 6f 6e 2d 66 69 6c 74 65 72 20 69  ing non-filter i
0870: 6e 76 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 6c  nvocation that l
0880: 69 65 73 0d 0a 66 75 72 74 68 65 72 20 61 6c 6f  ies..further alo
0890: 6e 67 20 74 68 65 20 63 68 61 69 6e 20 74 68 61  ng the chain tha
08a0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 69 6d  n the current im
08b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 3c  plementation...<
08c0: 48 33 3e 3c 41 20 4e 41 4d 45 3d 22 4d 35 22 3e  H3><A NAME="M5">
08d0: 54 48 45 20 4d 45 54 48 4f 44 20 43 48 41 49 4e  THE METHOD CHAIN
08e0: 3c 2f 41 3e 3c 2f 48 33 3e 0d 0a 57 68 65 6e 20  </A></H3>..When 
08f0: 61 20 6d 65 74 68 6f 64 20 6f 66 20 61 6e 20 6f  a method of an o
0900: 62 6a 65 63 74 20 69 73 20 69 6e 76 6f 6b 65 64  bject is invoked
0910: 2c 20 74 68 69 6e 67 73 20 68 61 70 70 65 6e 20  , things happen 
0920: 69 6e 20 73 65 76 65 72 61 6c 20 73 74 61 67 65  in several stage
0930: 73 3a 0d 0a 3c 50 3e 0d 0a 3c 4f 4c 20 63 6c 61  s:..<P>..<OL cla
0940: 73 73 3d 22 74 68 65 20 6d 65 74 68 6f 64 20 63  ss="the method c
0950: 68 61 69 6e 22 3e 0d 0a 3c 4c 49 20 76 61 6c 75  hain">..<LI valu
0960: 65 3d 22 31 22 3e 0d 0a 54 68 65 20 73 74 72 75  e="1">..The stru
0970: 63 74 75 72 65 20 6f 66 20 74 68 65 20 6f 62 6a  cture of the obj
0980: 65 63 74 2c 20 69 74 73 20 63 6c 61 73 73 2c 20  ect, its class, 
0990: 73 75 70 65 72 63 6c 61 73 73 65 73 2c 20 66 69  superclasses, fi
09a0: 6c 74 65 72 73 2c 20 61 6e 64 20 6d 69 78 69 6e  lters, and mixin
09b0: 73 2c 20 61 72 65 0d 0a 65 78 61 6d 69 6e 65 64  s, are..examined
09c0: 20 74 6f 20 62 75 69 6c 64 20 61 20 3c 49 3e 6d   to build a <I>m
09d0: 65 74 68 6f 64 20 63 68 61 69 6e 3c 2f 49 3e 2c  ethod chain</I>,
09e0: 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains 
09f0: 61 20 6c 69 73 74 20 6f 66 20 6d 65 74 68 6f 64  a list of method
0a00: 0d 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ..implementation
0a10: 73 20 74 6f 20 69 6e 76 6f 6b 65 2e 0d 0a 3c 50  s to invoke...<P
0a20: 3e 3c 4c 49 20 76 61 6c 75 65 3d 22 32 22 3e 0d  ><LI value="2">.
0a30: 0a 54 68 65 20 66 69 72 73 74 20 6d 65 74 68 6f  .The first metho
0a40: 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  d implementation
0a50: 20 6f 6e 20 74 68 65 20 63 68 61 69 6e 20 69 73   on the chain is
0a60: 20 69 6e 76 6f 6b 65 64 2e 0d 0a 3c 50 3e 3c 4c   invoked...<P><L
0a70: 49 20 76 61 6c 75 65 3d 22 33 22 3e 0d 0a 49 66  I value="3">..If
0a80: 20 74 68 61 74 20 6d 65 74 68 6f 64 20 69 6d 70   that method imp
0a90: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 76 6f  lementation invo
0aa0: 6b 65 73 20 74 68 65 20 3c 42 3e 6e 65 78 74 3c  kes the <B>next<
0ab0: 2f 42 3e 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  /B> command, the
0ac0: 20 6e 65 78 74 20 6d 65 74 68 6f 64 0d 0a 69 6d   next method..im
0ad0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
0ae0: 69 6e 76 6f 6b 65 64 20 28 77 69 74 68 20 69 74  invoked (with it
0af0: 73 20 61 72 67 75 6d 65 6e 74 73 20 62 65 69 6e  s arguments bein
0b00: 67 20 74 68 6f 73 65 20 74 68 61 74 20 77 65 72  g those that wer
0b10: 65 20 70 61 73 73 65 64 20 74 6f 0d 0a 3c 42 3e  e passed to..<B>
0b20: 6e 65 78 74 3c 2f 42 3e 29 2e 0d 0a 3c 50 3e 3c  next</B>)...<P><
0b30: 4c 49 20 76 61 6c 75 65 3d 22 34 22 3e 0d 0a 54  LI value="4">..T
0b40: 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 74  he result from t
0b50: 68 65 20 6f 76 65 72 61 6c 6c 20 6d 65 74 68 6f  he overall metho
0b60: 64 20 63 61 6c 6c 20 69 73 20 74 68 65 20 72 65  d call is the re
0b70: 73 75 6c 74 20 66 72 6f 6d 20 74 68 65 20 6f 75  sult from the ou
0b80: 74 65 72 6d 6f 73 74 0d 0a 6d 65 74 68 6f 64 20  termost..method 
0b90: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 3b 20  implementation; 
0ba0: 69 6e 6e 65 72 20 6d 65 74 68 6f 64 20 69 6d 70  inner method imp
0bb0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 72 65 74  lementations ret
0bc0: 75 72 6e 20 74 68 65 69 72 20 72 65 73 75 6c 74  urn their result
0bd0: 73 0d 0a 74 68 72 6f 75 67 68 20 3c 42 3e 6e 65  s..through <B>ne
0be0: 78 74 3c 2f 42 3e 2e 0d 0a 3c 50 3e 3c 4c 49 20  xt</B>...<P><LI 
0bf0: 76 61 6c 75 65 3d 22 35 22 3e 0d 0a 54 68 65 20  value="5">..The 
0c00: 6d 65 74 68 6f 64 20 63 68 61 69 6e 20 69 73 20  method chain is 
0c10: 63 61 63 68 65 64 20 66 6f 72 20 66 75 74 75 72  cached for futur
0c20: 65 20 75 73 65 2e 0d 0a 3c 50 3e 3c 2f 4f 4c 3e  e use...<P></OL>
0c30: 0d 0a 3c 48 34 3e 3c 41 20 4e 41 4d 45 3d 22 4d  ..<H4><A NAME="M
0c40: 36 22 3e 4d 45 54 48 4f 44 20 53 45 41 52 43 48  6">METHOD SEARCH
0c50: 20 4f 52 44 45 52 3c 2f 41 3e 3c 2f 48 34 3e 0d   ORDER</A></H4>.
0c60: 0a 57 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 69  .When constructi
0c70: 6e 67 20 74 68 65 20 6d 65 74 68 6f 64 20 63 68  ng the method ch
0c80: 61 69 6e 2c 20 6d 65 74 68 6f 64 20 69 6d 70 6c  ain, method impl
0c90: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 61 72 65 20  ementations are 
0ca0: 73 65 61 72 63 68 65 64 20 66 6f 72 20 69 6e 0d  searched for in.
0cb0: 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f  .the following o
0cc0: 72 64 65 72 3a 0d 0a 3c 50 3e 0d 0a 3c 4f 4c 20  rder:..<P>..<OL 
0cd0: 63 6c 61 73 73 3d 22 6d 65 74 68 6f 64 20 73 65  class="method se
0ce0: 61 72 63 68 20 6f 72 64 65 72 22 3e 0d 0a 3c 4c  arch order">..<L
0cf0: 49 20 76 61 6c 75 65 3d 22 31 22 3e 0d 0a 49 6e  I value="1">..In
0d00: 20 74 68 65 20 63 6c 61 73 73 65 73 20 6d 69 78   the classes mix
0d10: 65 64 20 69 6e 74 6f 20 74 68 65 20 6f 62 6a 65  ed into the obje
0d20: 63 74 2c 20 69 6e 20 63 6c 61 73 73 20 74 72 61  ct, in class tra
0d30: 76 65 72 73 61 6c 20 6f 72 64 65 72 2e 20 54 68  versal order. Th
0d40: 65 20 6c 69 73 74 20 6f 66 0d 0a 6d 69 78 69 6e  e list of..mixin
0d50: 73 20 69 73 20 63 68 65 63 6b 65 64 20 69 6e 20  s is checked in 
0d60: 6e 61 74 75 72 61 6c 20 6f 72 64 65 72 2e 0d 0a  natural order...
0d70: 3c 50 3e 3c 4c 49 20 76 61 6c 75 65 3d 22 32 22  <P><LI value="2"
0d80: 3e 0d 0a 49 6e 20 74 68 65 20 63 6c 61 73 73 65  >..In the classe
0d90: 73 20 6d 69 78 65 64 20 69 6e 74 6f 20 74 68 65  s mixed into the
0da0: 20 63 6c 61 73 73 65 73 20 6f 66 20 74 68 65 20   classes of the 
0db0: 6f 62 6a 65 63 74 2c 20 77 69 74 68 20 73 6f 75  object, with sou
0dc0: 72 63 65 73 20 6f 66 20 6d 69 78 69 6e 67 20 69  rces of mixing i
0dd0: 6e 0d 0a 62 65 69 6e 67 20 73 65 61 72 63 68 65  n..being searche
0de0: 64 20 69 6e 20 63 6c 61 73 73 20 74 72 61 76 65  d in class trave
0df0: 72 73 61 6c 20 6f 72 64 65 72 2e 20 57 69 74 68  rsal order. With
0e00: 69 6e 20 65 61 63 68 20 63 6c 61 73 73 2c 20 74  in each class, t
0e10: 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 69 6e  he list of mixin
0e20: 73 0d 0a 69 73 20 70 72 6f 63 65 73 73 65 64 20  s..is processed 
0e30: 69 6e 20 6e 61 74 75 72 61 6c 20 6f 72 64 65 72  in natural order
0e40: 2e 0d 0a 3c 50 3e 3c 4c 49 20 76 61 6c 75 65 3d  ...<P><LI value=
0e50: 22 33 22 3e 0d 0a 49 6e 20 74 68 65 20 6f 62 6a  "3">..In the obj
0e60: 65 63 74 20 69 74 73 65 6c 66 2e 0d 0a 3c 50 3e  ect itself...<P>
0e70: 3c 4c 49 20 76 61 6c 75 65 3d 22 34 22 3e 0d 0a  <LI value="4">..
0e80: 49 6e 20 74 68 65 20 6f 62 6a 65 63 74 27 73 20  In the object's 
0e90: 63 6c 61 73 73 2e 0d 0a 3c 50 3e 3c 4c 49 20 76  class...<P><LI v
0ea0: 61 6c 75 65 3d 22 35 22 3e 0d 0a 49 6e 20 74 68  alue="5">..In th
0eb0: 65 20 73 75 70 65 72 63 6c 61 73 73 65 73 20 6f  e superclasses o
0ec0: 66 20 74 68 65 20 63 6c 61 73 73 2c 20 66 6f 6c  f the class, fol
0ed0: 6c 6f 77 69 6e 67 20 65 61 63 68 20 73 75 70 65  lowing each supe
0ee0: 72 63 6c 61 73 73 20 69 6e 20 61 20 64 65 70 74  rclass in a dept
0ef0: 68 2d 66 69 72 73 74 0d 0a 66 61 73 68 69 6f 6e  h-first..fashion
0f00: 20 69 6e 20 74 68 65 20 6e 61 74 75 72 61 6c 20   in the natural 
0f10: 6f 72 64 65 72 20 6f 66 20 74 68 65 20 73 75 70  order of the sup
0f20: 65 72 63 6c 61 73 73 20 6c 69 73 74 2e 0d 0a 3c  erclass list...<
0f30: 50 3e 3c 2f 4f 4c 3e 0d 0a 3c 50 3e 0d 0a 41 6e  P></OL>..<P>..An
0f40: 79 20 70 61 72 74 69 63 75 6c 61 72 20 6d 65 74  y particular met
0f50: 68 6f 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  hod implementati
0f60: 6f 6e 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  on always comes 
0f70: 61 73 20 3c 49 3e 6c 61 74 65 3c 2f 49 3e 20 69  as <I>late</I> i
0f80: 6e 20 74 68 65 0d 0a 72 65 73 75 6c 74 69 6e 67  n the..resulting
0f90: 20 6c 69 73 74 20 6f 66 20 69 6d 70 6c 65 6d 65   list of impleme
0fa0: 6e 74 61 74 69 6f 6e 73 20 61 73 20 70 6f 73 73  ntations as poss
0fb0: 69 62 6c 65 3b 20 74 68 69 73 20 6d 65 61 6e 73  ible; this means
0fc0: 20 74 68 61 74 20 69 66 20 73 6f 6d 65 20 63 6c   that if some cl
0fd0: 61 73 73 2c 0d 0a 41 2c 20 69 73 20 62 6f 74 68  ass,..A, is both
0fe0: 20 6d 69 78 65 64 20 69 6e 74 6f 20 61 20 63 6c   mixed into a cl
0ff0: 61 73 73 2c 20 42 2c 20 61 6e 64 20 69 73 20 61  ass, B, and is a
1000: 6c 73 6f 20 61 20 73 75 70 65 72 63 6c 61 73 73  lso a superclass
1010: 20 6f 66 20 42 2c 20 74 68 65 20 69 6e 73 74 61   of B, the insta
1020: 6e 63 65 73 0d 0a 6f 66 20 42 20 77 69 6c 6c 20  nces..of B will 
1030: 61 6c 77 61 79 73 20 74 72 65 61 74 20 41 20 61  always treat A a
1040: 73 20 61 20 73 75 70 65 72 63 6c 61 73 73 20 66  s a superclass f
1050: 72 6f 6d 20 74 68 65 20 70 65 72 73 70 65 63 74  rom the perspect
1060: 69 76 65 20 6f 66 20 69 6e 68 65 72 69 74 61 6e  ive of inheritan
1070: 63 65 2e 0d 0a 54 68 69 73 20 69 73 20 74 72 75  ce...This is tru
1080: 65 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  e even when the 
1090: 6d 75 6c 74 69 70 6c 65 20 69 6e 68 65 72 69 74  multiple inherit
10a0: 61 6e 63 65 20 69 73 20 70 72 6f 63 65 73 73 65  ance is processe
10b0: 64 20 69 6e 64 69 72 65 63 74 6c 79 2e 0d 0a 3c  d indirectly...<
10c0: 48 34 3e 3c 41 20 4e 41 4d 45 3d 22 4d 37 22 3e  H4><A NAME="M7">
10d0: 46 49 4c 54 45 52 53 3c 2f 41 3e 3c 2f 48 34 3e  FILTERS</A></H4>
10e0: 0d 0a 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74  ..When an object
10f0: 20 68 61 73 20 61 20 6c 69 73 74 20 6f 66 20 66   has a list of f
1100: 69 6c 74 65 72 20 6e 61 6d 65 73 20 73 65 74 20  ilter names set 
1110: 75 70 6f 6e 20 69 74 2c 20 6f 72 20 69 73 20 61  upon it, or is a
1120: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 61 0d  n instance of a.
1130: 0a 63 6c 61 73 73 20 28 6f 72 20 68 61 73 20 6d  .class (or has m
1140: 69 78 65 64 20 69 6e 20 61 20 63 6c 61 73 73 29  ixed in a class)
1150: 20 74 68 61 74 20 68 61 73 20 61 20 6c 69 73 74   that has a list
1160: 20 6f 66 20 66 69 6c 74 65 72 20 6e 61 6d 65 73   of filter names
1170: 20 73 65 74 20 75 70 6f 6e 20 69 74 2c 0d 0a 62   set upon it,..b
1180: 65 66 6f 72 65 20 65 76 65 72 79 20 69 6e 76 6f  efore every invo
1190: 63 61 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6d 65  cation of any me
11a0: 74 68 6f 64 20 74 68 65 20 66 69 6c 74 65 72 73  thod the filters
11b0: 20 61 72 65 20 70 72 6f 63 65 73 73 65 64 2e 20   are processed. 
11c0: 46 69 6c 74 65 72 0d 0a 69 6d 70 6c 65 6d 65 6e  Filter..implemen
11d0: 74 61 74 69 6f 6e 73 20 61 72 65 20 66 6f 75 6e  tations are foun
11e0: 64 20 69 6e 20 63 6c 61 73 73 20 74 72 61 76 65  d in class trave
11f0: 72 73 61 6c 20 6f 72 64 65 72 2c 20 61 73 20 61  rsal order, as a
1200: 72 65 20 74 68 65 20 6c 69 73 74 73 20 6f 66 20  re the lists of 
1210: 66 69 6c 74 65 72 0d 0a 6e 61 6d 65 73 20 28 65  filter..names (e
1220: 61 63 68 20 6f 66 20 77 68 69 63 68 20 69 73 20  ach of which is 
1230: 74 72 61 76 65 72 73 65 64 20 69 6e 20 6e 61 74  traversed in nat
1240: 75 72 61 6c 20 6c 69 73 74 20 6f 72 64 65 72 29  ural list order)
1250: 2e 20 45 78 70 6c 69 63 69 74 6c 79 20 69 6e 76  . Explicitly inv
1260: 6f 6b 69 6e 67 0d 0a 61 20 6d 65 74 68 6f 64 20  oking..a method 
1270: 75 73 65 64 20 61 73 20 61 20 66 69 6c 74 65 72  used as a filter
1280: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 61 74   will cause that
1290: 20 6d 65 74 68 6f 64 20 74 6f 20 62 65 20 69 6e   method to be in
12a0: 76 6f 6b 65 64 20 74 77 69 63 65 2c 20 6f 6e 63  voked twice, onc
12b0: 65 20 61 73 0d 0a 61 20 66 69 6c 74 65 72 20 61  e as..a filter a
12c0: 6e 64 20 6f 6e 63 65 20 61 73 20 61 20 6e 6f 72  nd once as a nor
12d0: 6d 61 6c 20 6d 65 74 68 6f 64 2e 0d 0a 3c 50 3e  mal method...<P>
12e0: 0d 0a 45 61 63 68 20 66 69 6c 74 65 72 20 73 68  ..Each filter sh
12f0: 6f 75 6c 64 20 64 65 63 69 64 65 20 66 6f 72 20  ould decide for 
1300: 69 74 73 65 6c 66 20 77 68 65 74 68 65 72 20 74  itself whether t
1310: 6f 20 70 65 72 6d 69 74 20 74 68 65 20 65 78 65  o permit the exe
1320: 63 75 74 69 6f 6e 20 74 6f 20 67 6f 0d 0a 66 6f  cution to go..fo
1330: 72 77 61 72 64 20 74 6f 20 74 68 65 20 70 72 6f  rward to the pro
1340: 70 65 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  per implementati
1350: 6f 6e 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64  on of the method
1360: 20 28 77 68 69 63 68 20 69 74 20 64 6f 65 73 20   (which it does 
1370: 62 79 20 69 6e 76 6f 6b 69 6e 67 0d 0a 74 68 65  by invoking..the
1380: 20 3c 42 3e 6e 65 78 74 3c 2f 42 3e 20 63 6f 6d   <B>next</B> com
1390: 6d 61 6e 64 20 61 73 20 66 69 6c 74 65 72 73 20  mand as filters 
13a0: 61 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74  are inserted int
13b0: 6f 20 74 68 65 20 66 72 6f 6e 74 20 6f 66 20 74  o the front of t
13c0: 68 65 20 6d 65 74 68 6f 64 0d 0a 63 61 6c 6c 20  he method..call 
13d0: 63 68 61 69 6e 29 20 61 6e 64 20 69 73 20 72 65  chain) and is re
13e0: 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 72 65  sponsible for re
13f0: 74 75 72 6e 69 6e 67 20 74 68 65 20 72 65 73 75  turning the resu
1400: 6c 74 20 6f 66 20 3c 42 3e 6e 65 78 74 3c 2f 42  lt of <B>next</B
1410: 3e 2e 0d 0a 3c 50 3e 0d 0a 46 69 6c 74 65 72 73  >...<P>..Filters
1420: 20 61 72 65 20 69 6e 76 6f 6b 65 64 20 77 68 65   are invoked whe
1430: 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 20  n processing an 
1440: 69 6e 76 6f 6b 61 74 69 6f 6e 20 6f 66 20 74 68  invokation of th
1450: 65 20 3c 42 3e 75 6e 6b 6e 6f 77 6e 3c 2f 42 3e  e <B>unknown</B>
1460: 0d 0a 6d 65 74 68 6f 64 20 62 65 63 61 75 73 65  ..method because
1470: 20 6f 66 20 61 20 66 61 69 6c 75 72 65 20 74 6f   of a failure to
1480: 20 6c 6f 63 61 74 65 20 61 20 6d 65 74 68 6f 64   locate a method
1490: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
14a0: 20 62 75 74 20 3c 49 3e 6e 6f 74 3c 2f 49 3e 0d   but <I>not</I>.
14b0: 0a 77 68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20 65  .when invoking e
14c0: 69 74 68 65 72 20 63 6f 6e 73 74 72 75 63 74 6f  ither constructo
14d0: 72 73 20 6f 72 20 64 65 73 74 72 75 63 74 6f 72  rs or destructor
14e0: 73 2e 20 28 4e 6f 74 65 20 68 6f 77 65 76 65 72  s. (Note however
14f0: 20 74 68 61 74 20 74 68 65 0d 0a 3c 42 3e 64 65   that the..<B>de
1500: 73 74 72 6f 79 3c 2f 42 3e 20 6d 65 74 68 6f 64  stroy</B> method
1510: 20 69 73 20 61 20 63 6f 6e 76 65 6e 74 69 6f 6e   is a convention
1520: 61 6c 20 6d 65 74 68 6f 64 2c 20 61 6e 64 20 66  al method, and f
1530: 69 6c 74 65 72 73 20 61 72 65 20 69 6e 76 6f 6b  ilters are invok
1540: 65 64 20 61 73 0d 0a 6e 6f 72 6d 61 6c 20 77 68  ed as..normal wh
1550: 65 6e 20 69 74 20 69 73 20 63 61 6c 6c 65 64 2e  en it is called.
1560: 29 0d 0a 3c 48 33 3e 3c 41 20 4e 41 4d 45 3d 22  )..<H3><A NAME="
1570: 4d 38 22 3e 45 58 41 4d 50 4c 45 53 3c 2f 41 3e  M8">EXAMPLES</A>
1580: 3c 2f 48 33 3e 0d 0a 54 68 69 73 20 65 78 61 6d  </H3>..This exam
1590: 70 6c 65 20 64 65 6d 6f 6e 73 74 72 61 74 65 73  ple demonstrates
15a0: 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20   how to use the 
15b0: 3c 42 3e 6e 65 78 74 3c 2f 42 3e 20 63 6f 6d 6d  <B>next</B> comm
15c0: 61 6e 64 20 74 6f 20 63 61 6c 6c 20 74 68 65 0d  and to call the.
15d0: 0a 28 73 75 70 65 72 29 63 6c 61 73 73 27 73 20  .(super)class's 
15e0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
15f0: 66 20 61 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  f a method. The 
1600: 73 63 72 69 70 74 3a 0d 0a 3c 50 3e 0d 0a 3c 50  script:..<P>..<P
1610: 52 45 3e 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65  RE>oo::class cre
1620: 61 74 65 20 74 68 65 53 75 70 65 72 63 6c 61 73  ate theSuperclas
1630: 73 20 7b 0d 0a 20 20 20 20 6d 65 74 68 6f 64 20  s {..    method 
1640: 65 78 61 6d 70 6c 65 20 7b 61 72 67 73 7d 20 7b  example {args} {
1650: 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 26  ..        puts &
1660: 71 75 6f 74 3b 69 6e 20 74 68 65 20 73 75 70 65  quot;in the supe
1670: 72 63 6c 61 73 73 2c 20 61 72 67 73 20 3d 20 24  rclass, args = $
1680: 61 72 67 73 26 71 75 6f 74 3b 0d 0a 20 20 20 20  args&quot;..    
1690: 7d 0d 0a 7d 0d 0a 6f 6f 3a 3a 63 6c 61 73 73 20  }..}..oo::class 
16a0: 63 72 65 61 74 65 20 74 68 65 53 75 62 63 6c 61  create theSubcla
16b0: 73 73 20 7b 0d 0a 20 20 20 20 73 75 70 65 72 63  ss {..    superc
16c0: 6c 61 73 73 20 74 68 65 53 75 70 65 72 63 6c 61  lass theSupercla
16d0: 73 73 0d 0a 20 20 20 20 6d 65 74 68 6f 64 20 65  ss..    method e
16e0: 78 61 6d 70 6c 65 20 7b 61 72 67 73 7d 20 7b 0d  xample {args} {.
16f0: 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 26 71  .        puts &q
1700: 75 6f 74 3b 62 65 66 6f 72 65 20 63 68 61 69 6e  uot;before chain
1710: 69 6e 67 20 66 72 6f 6d 20 73 75 62 63 6c 61 73  ing from subclas
1720: 73 2c 20 61 72 67 73 20 3d 20 24 61 72 67 73 26  s, args = $args&
1730: 71 75 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 3c  quot;..        <
1740: 42 3e 6e 65 78 74 3c 2f 42 3e 20 61 20 7b 5c 2a  B>next</B> a {\*
1750: 7d 24 61 72 67 73 20 62 0d 0a 20 20 20 20 20 20  }$args b..      
1760: 20 20 3c 42 3e 6e 65 78 74 3c 2f 42 3e 20 70 75    <B>next</B> pu
1770: 72 65 53 79 6e 74 68 65 73 69 73 0d 0a 20 20 20  reSynthesis..   
1780: 20 20 20 20 20 70 75 74 73 20 26 71 75 6f 74 3b       puts &quot;
1790: 61 66 74 65 72 20 63 68 61 69 6e 69 6e 67 20 66  after chaining f
17a0: 72 6f 6d 20 73 75 62 63 6c 61 73 73 26 71 75 6f  rom subclass&quo
17b0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 7d 0d 0a 74 68  t;..    }..}..th
17c0: 65 53 75 62 63 6c 61 73 73 20 63 72 65 61 74 65  eSubclass create
17d0: 20 6f 62 6a 0d 0a 6f 6f 3a 3a 6f 62 6a 64 65 66   obj..oo::objdef
17e0: 69 6e 65 20 6f 62 6a 20 6d 65 74 68 6f 64 20 65  ine obj method e
17f0: 78 61 6d 70 6c 65 20 61 72 67 73 20 7b 0d 0a 20  xample args {.. 
1800: 20 20 20 70 75 74 73 20 26 71 75 6f 74 3b 70 65     puts &quot;pe
1810: 72 2d 6f 62 6a 65 63 74 20 6d 65 74 68 6f 64 2c  r-object method,
1820: 20 61 72 67 73 20 3d 20 24 61 72 67 73 26 71 75   args = $args&qu
1830: 6f 74 3b 0d 0a 20 20 20 20 3c 42 3e 6e 65 78 74  ot;..    <B>next
1840: 3c 2f 42 3e 20 78 20 7b 5c 2a 7d 24 61 72 67 73  </B> x {\*}$args
1850: 20 79 0d 0a 20 20 20 20 3c 42 3e 6e 65 78 74 3c   y..    <B>next<
1860: 2f 42 3e 0d 0a 7d 0d 0a 6f 62 6a 20 65 78 61 6d  /B>..}..obj exam
1870: 70 6c 65 20 31 20 32 20 33 3c 2f 50 52 45 3e 0d  ple 1 2 3</PRE>.
1880: 0a 3c 50 3e 0d 0a 70 72 69 6e 74 73 20 74 68 65  .<P>..prints the
1890: 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0d 0a 3c 50 3e   following:..<P>
18a0: 0d 0a 3c 50 52 45 3e 70 65 72 2d 6f 62 6a 65 63  ..<PRE>per-objec
18b0: 74 20 6d 65 74 68 6f 64 2c 20 61 72 67 73 20 3d  t method, args =
18c0: 20 31 20 32 20 33 0d 0a 62 65 66 6f 72 65 20 63   1 2 3..before c
18d0: 68 61 69 6e 69 6e 67 20 66 72 6f 6d 20 73 75 62  haining from sub
18e0: 63 6c 61 73 73 2c 20 61 72 67 73 20 3d 20 78 20  class, args = x 
18f0: 31 20 32 20 33 20 79 0d 0a 69 6e 20 74 68 65 20  1 2 3 y..in the 
1900: 73 75 70 65 72 63 6c 61 73 73 2c 20 61 72 67 73  superclass, args
1910: 20 3d 20 61 20 78 20 31 20 32 20 33 20 79 20 62   = a x 1 2 3 y b
1920: 0d 0a 69 6e 20 74 68 65 20 73 75 70 65 72 63 6c  ..in the supercl
1930: 61 73 73 2c 20 61 72 67 73 20 3d 20 70 75 72 65  ass, args = pure
1940: 53 79 6e 74 68 65 73 69 73 0d 0a 61 66 74 65 72  Synthesis..after
1950: 20 63 68 61 69 6e 69 6e 67 20 66 72 6f 6d 20 73   chaining from s
1960: 75 62 63 6c 61 73 73 0d 0a 62 65 66 6f 72 65 20  ubclass..before 
1970: 63 68 61 69 6e 69 6e 67 20 66 72 6f 6d 20 73 75  chaining from su
1980: 62 63 6c 61 73 73 2c 20 61 72 67 73 20 3d 20 0d  bclass, args = .
1990: 0a 69 6e 20 74 68 65 20 73 75 70 65 72 63 6c 61  .in the supercla
19a0: 73 73 2c 20 61 72 67 73 20 3d 20 61 20 62 0d 0a  ss, args = a b..
19b0: 69 6e 20 74 68 65 20 73 75 70 65 72 63 6c 61 73  in the superclas
19c0: 73 2c 20 61 72 67 73 20 3d 20 70 75 72 65 53 79  s, args = pureSy
19d0: 6e 74 68 65 73 69 73 0d 0a 61 66 74 65 72 20 63  nthesis..after c
19e0: 68 61 69 6e 69 6e 67 20 66 72 6f 6d 20 73 75 62  haining from sub
19f0: 63 6c 61 73 73 3c 2f 50 52 45 3e 0d 0a 3c 50 3e  class</PRE>..<P>
1a00: 0d 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 64  ..This example d
1a10: 65 6d 6f 6e 73 74 72 61 74 65 73 20 68 6f 77 20  emonstrates how 
1a20: 74 6f 20 62 75 69 6c 64 20 61 20 73 69 6d 70 6c  to build a simpl
1a30: 65 20 63 61 63 68 65 20 63 6c 61 73 73 20 74 68  e cache class th
1a40: 61 74 20 61 70 70 6c 69 65 73 0d 0a 6d 65 6d 6f  at applies..memo
1a50: 69 7a 61 74 69 6f 6e 20 74 6f 20 61 6c 6c 20 74  ization to all t
1a60: 68 65 20 6d 65 74 68 6f 64 20 63 61 6c 6c 73 20  he method calls 
1a70: 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 73 20 69  of the objects i
1a80: 74 20 69 73 20 6d 69 78 65 64 20 69 6e 74 6f 2c  t is mixed into,
1a90: 20 61 6e 64 20 73 68 6f 77 73 0d 0a 68 6f 77 20   and shows..how 
1aa0: 69 74 20 63 61 6e 20 6d 61 6b 65 20 61 20 64 69  it can make a di
1ab0: 66 66 65 72 65 6e 63 65 20 74 6f 20 63 6f 6d 70  fference to comp
1ac0: 75 74 61 74 69 6f 6e 20 74 69 6d 65 73 3a 0d 0a  utation times:..
1ad0: 3c 50 3e 0d 0a 3c 50 52 45 3e 6f 6f 3a 3a 63 6c  <P>..<PRE>oo::cl
1ae0: 61 73 73 20 63 72 65 61 74 65 20 63 61 63 68 65  ass create cache
1af0: 20 7b 0d 0a 20 20 20 20 66 69 6c 74 65 72 20 4d   {..    filter M
1b00: 65 6d 6f 69 7a 65 0d 0a 20 20 20 20 6d 65 74 68  emoize..    meth
1b10: 6f 64 20 4d 65 6d 6f 69 7a 65 20 61 72 67 73 20  od Memoize args 
1b20: 7b 0d 0a 20 20 20 20 20 20 20 20 3c 49 3e 23 20  {..        <I># 
1b30: 44 6f 20 6e 6f 74 20 66 69 6c 74 65 72 20 74 68  Do not filter th
1b40: 65 20 63 6f 72 65 20 6d 65 74 68 6f 64 20 69 6d  e core method im
1b50: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 3c 2f 49  plementations</I
1b60: 3e 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  >..        if {[
1b70: 6c 69 6e 64 65 78 20 5b 73 65 6c 66 20 74 61 72  lindex [self tar
1b80: 67 65 74 5d 20 30 5d 20 65 71 20 26 71 75 6f 74  get] 0] eq &quot
1b90: 3b 3a 3a 6f 6f 3a 3a 6f 62 6a 65 63 74 26 71 75  ;::oo::object&qu
1ba0: 6f 74 3b 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ot;} {..        
1bb0: 20 20 20 20 72 65 74 75 72 6e 20 5b 3c 42 3e 6e      return [<B>n
1bc0: 65 78 74 3c 2f 42 3e 20 7b 5c 2a 7d 24 61 72 67  ext</B> {\*}$arg
1bd0: 73 5d 0d 0a 20 20 20 20 20 20 20 20 7d 3c 62 72  s]..        }<br
1be0: 3e 0d 0a 20 20 20 20 20 20 20 20 3c 49 3e 23 20  >..        <I># 
1bf0: 43 68 65 63 6b 20 69 66 20 74 68 65 20 76 61 6c  Check if the val
1c00: 75 65 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e  ue is already in
1c10: 20 74 68 65 20 63 61 63 68 65 3c 2f 49 3e 0d 0a   the cache</I>..
1c20: 20 20 20 20 20 20 20 20 6d 79 20 76 61 72 69 61          my varia
1c30: 62 6c 65 20 56 61 6c 75 65 43 61 63 68 65 0d 0a  ble ValueCache..
1c40: 20 20 20 20 20 20 20 20 73 65 74 20 6b 65 79 20          set key 
1c50: 5b 73 65 6c 66 20 74 61 72 67 65 74 5d 2c 24 61  [self target],$a
1c60: 72 67 73 0d 0a 20 20 20 20 20 20 20 20 69 66 20  rgs..        if 
1c70: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 20 56 61 6c  {[info exist Val
1c80: 75 65 43 61 63 68 65 28 24 6b 65 79 29 5d 7d 20  ueCache($key)]} 
1c90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1ca0: 65 74 75 72 6e 20 24 56 61 6c 75 65 43 61 63 68  eturn $ValueCach
1cb0: 65 28 24 6b 65 79 29 0d 0a 20 20 20 20 20 20 20  e($key)..       
1cc0: 20 7d 3c 62 72 3e 0d 0a 20 20 20 20 20 20 20 20   }<br>..        
1cd0: 3c 49 3e 23 20 43 6f 6d 70 75 74 65 20 76 61 6c  <I># Compute val
1ce0: 75 65 2c 20 69 6e 73 65 72 74 20 69 6e 74 6f 20  ue, insert into 
1cf0: 63 61 63 68 65 2c 20 61 6e 64 20 72 65 74 75 72  cache, and retur
1d00: 6e 20 69 74 3c 2f 49 3e 0d 0a 20 20 20 20 20 20  n it</I>..      
1d10: 20 20 72 65 74 75 72 6e 20 5b 73 65 74 20 56 61    return [set Va
1d20: 6c 75 65 43 61 63 68 65 28 24 6b 65 79 29 20 5b  lueCache($key) [
1d30: 3c 42 3e 6e 65 78 74 3c 2f 42 3e 20 7b 5c 2a 7d  <B>next</B> {\*}
1d40: 24 61 72 67 73 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  $args]]..    }..
1d50: 20 20 20 20 6d 65 74 68 6f 64 20 66 6c 75 73 68      method flush
1d60: 43 61 63 68 65 20 7b 7d 20 7b 0d 0a 20 20 20 20  Cache {} {..    
1d70: 20 20 20 20 6d 79 20 76 61 72 69 61 62 6c 65 20      my variable 
1d80: 56 61 6c 75 65 43 61 63 68 65 0d 0a 20 20 20 20  ValueCache..    
1d90: 20 20 20 20 75 6e 73 65 74 20 56 61 6c 75 65 43      unset ValueC
1da0: 61 63 68 65 0d 0a 20 20 20 20 20 20 20 20 3c 49  ache..        <I
1db0: 3e 23 20 53 6b 69 70 20 74 68 65 20 63 61 63 68  ># Skip the cach
1dc0: 69 6e 67 3c 2f 49 3e 0d 0a 20 20 20 20 20 20 20  ing</I>..       
1dd0: 20 72 65 74 75 72 6e 20 2d 6c 65 76 65 6c 20 32   return -level 2
1de0: 20 26 71 75 6f 74 3b 26 71 75 6f 74 3b 0d 0a 20   &quot;&quot;.. 
1df0: 20 20 20 7d 0d 0a 7d 3c 62 72 3e 0d 0a 6f 6f 3a     }..}<br>..oo:
1e00: 3a 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 64  :object create d
1e10: 65 6d 6f 0d 0a 6f 6f 3a 3a 6f 62 6a 64 65 66 69  emo..oo::objdefi
1e20: 6e 65 20 64 65 6d 6f 20 7b 0d 0a 20 20 20 20 6d  ne demo {..    m
1e30: 69 78 69 6e 20 63 61 63 68 65 0d 0a 20 20 20 20  ixin cache..    
1e40: 6d 65 74 68 6f 64 20 63 6f 6d 70 75 74 65 20 7b  method compute {
1e50: 61 20 62 20 63 7d 20 7b 0d 0a 20 20 20 20 20 20  a b c} {..      
1e60: 20 20 61 66 74 65 72 20 33 30 30 30 20 3c 49 3e    after 3000 <I>
1e70: 3b 23 20 53 69 6d 75 6c 61 74 65 20 64 65 65 70  ;# Simulate deep
1e80: 20 74 68 6f 75 67 68 74 3c 2f 49 3e 0d 0a 20 20   thought</I>..  
1e90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78        return [ex
1ea0: 70 72 20 7b 24 61 20 2b 20 24 62 20 2a 20 24 63  pr {$a + $b * $c
1eb0: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 6d  }]..    }..    m
1ec0: 65 74 68 6f 64 20 63 6f 6d 70 75 74 65 32 20 7b  ethod compute2 {
1ed0: 61 20 62 20 63 7d 20 7b 0d 0a 20 20 20 20 20 20  a b c} {..      
1ee0: 20 20 61 66 74 65 72 20 33 30 30 30 20 3c 49 3e    after 3000 <I>
1ef0: 3b 23 20 53 69 6d 75 6c 61 74 65 20 64 65 65 70  ;# Simulate deep
1f00: 20 74 68 6f 75 67 68 74 3c 2f 49 3e 0d 0a 20 20   thought</I>..  
1f10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78        return [ex
1f20: 70 72 20 7b 24 61 20 2a 20 24 62 20 2b 20 24 63  pr {$a * $b + $c
1f30: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 7d 3c 62 72 3e  }]..    }..}<br>
1f40: 0d 0a 70 75 74 73 20 5b 64 65 6d 6f 20 63 6f 6d  ..puts [demo com
1f50: 70 75 74 65 20 20 31 20 32 20 33 5d 20 20 20 20  pute  1 2 3]    
1f60: 20 20 3c 49 3e 3c 66 6f 6e 74 20 73 69 7a 65 3d    <I><font size=
1f70: 22 2b 31 22 3e 26 23 38 35 39 34 3b 3c 2f 66 6f  "+1">&#8594;</fo
1f80: 6e 74 3e 20 70 72 69 6e 74 73 20 26 71 75 6f 74  nt> prints &quot
1f90: 3b 37 26 71 75 6f 74 3b 20 61 66 74 65 72 20 64  ;7&quot; after d
1fa0: 65 6c 61 79 3c 2f 49 3e 0d 0a 70 75 74 73 20 5b  elay</I>..puts [
1fb0: 64 65 6d 6f 20 63 6f 6d 70 75 74 65 32 20 34 20  demo compute2 4 
1fc0: 35 20 36 5d 20 20 20 20 20 20 3c 49 3e 3c 66 6f  5 6]      <I><fo
1fd0: 6e 74 20 73 69 7a 65 3d 22 2b 31 22 3e 26 23 38  nt size="+1">&#8
1fe0: 35 39 34 3b 3c 2f 66 6f 6e 74 3e 20 70 72 69 6e  594;</font> prin
1ff0: 74 73 20 26 71 75 6f 74 3b 32 36 26 71 75 6f 74  ts &quot;26&quot
2000: 3b 20 61 66 74 65 72 20 64 65 6c 61 79 3c 2f 49  ; after delay</I
2010: 3e 0d 0a 70 75 74 73 20 5b 64 65 6d 6f 20 63 6f  >..puts [demo co
2020: 6d 70 75 74 65 20 20 31 20 32 20 33 5d 20 20 20  mpute  1 2 3]   
2030: 20 20 20 3c 49 3e 3c 66 6f 6e 74 20 73 69 7a 65     <I><font size
2040: 3d 22 2b 31 22 3e 26 23 38 35 39 34 3b 3c 2f 66  ="+1">&#8594;</f
2050: 6f 6e 74 3e 20 70 72 69 6e 74 73 20 26 71 75 6f  ont> prints &quo
2060: 74 3b 37 26 71 75 6f 74 3b 20 69 6e 73 74 61 6e  t;7&quot; instan
2070: 74 6c 79 3c 2f 49 3e 0d 0a 70 75 74 73 20 5b 64  tly</I>..puts [d
2080: 65 6d 6f 20 63 6f 6d 70 75 74 65 32 20 34 20 35  emo compute2 4 5
2090: 20 36 5d 20 20 20 20 20 20 3c 49 3e 3c 66 6f 6e   6]      <I><fon
20a0: 74 20 73 69 7a 65 3d 22 2b 31 22 3e 26 23 38 35  t size="+1">&#85
20b0: 39 34 3b 3c 2f 66 6f 6e 74 3e 20 70 72 69 6e 74  94;</font> print
20c0: 73 20 26 71 75 6f 74 3b 32 36 26 71 75 6f 74 3b  s &quot;26&quot;
20d0: 20 69 6e 73 74 61 6e 74 6c 79 3c 2f 49 3e 0d 0a   instantly</I>..
20e0: 70 75 74 73 20 5b 64 65 6d 6f 20 63 6f 6d 70 75  puts [demo compu
20f0: 74 65 20 20 34 20 35 20 36 5d 20 20 20 20 20 20  te  4 5 6]      
2100: 3c 49 3e 3c 66 6f 6e 74 20 73 69 7a 65 3d 22 2b  <I><font size="+
2110: 31 22 3e 26 23 38 35 39 34 3b 3c 2f 66 6f 6e 74  1">&#8594;</font
2120: 3e 20 70 72 69 6e 74 73 20 26 71 75 6f 74 3b 33  > prints &quot;3
2130: 34 26 71 75 6f 74 3b 20 61 66 74 65 72 20 64 65  4&quot; after de
2140: 6c 61 79 3c 2f 49 3e 0d 0a 70 75 74 73 20 5b 64  lay</I>..puts [d
2150: 65 6d 6f 20 63 6f 6d 70 75 74 65 20 20 34 20 35  emo compute  4 5
2160: 20 36 5d 20 20 20 20 20 20 3c 49 3e 3c 66 6f 6e   6]      <I><fon
2170: 74 20 73 69 7a 65 3d 22 2b 31 22 3e 26 23 38 35  t size="+1">&#85
2180: 39 34 3b 3c 2f 66 6f 6e 74 3e 20 70 72 69 6e 74  94;</font> print
2190: 73 20 26 71 75 6f 74 3b 33 34 26 71 75 6f 74 3b  s &quot;34&quot;
21a0: 20 69 6e 73 74 61 6e 74 6c 79 3c 2f 49 3e 0d 0a   instantly</I>..
21b0: 70 75 74 73 20 5b 64 65 6d 6f 20 63 6f 6d 70 75  puts [demo compu
21c0: 74 65 20 20 31 20 32 20 33 5d 20 20 20 20 20 20  te  1 2 3]      
21d0: 3c 49 3e 3c 66 6f 6e 74 20 73 69 7a 65 3d 22 2b  <I><font size="+
21e0: 31 22 3e 26 23 38 35 39 34 3b 3c 2f 66 6f 6e 74  1">&#8594;</font
21f0: 3e 20 70 72 69 6e 74 73 20 26 71 75 6f 74 3b 37  > prints &quot;7
2200: 26 71 75 6f 74 3b 20 69 6e 73 74 61 6e 74 6c 79  &quot; instantly
2210: 3c 2f 49 3e 0d 0a 64 65 6d 6f 20 66 6c 75 73 68  </I>..demo flush
2220: 43 61 63 68 65 0d 0a 70 75 74 73 20 5b 64 65 6d  Cache..puts [dem
2230: 6f 20 63 6f 6d 70 75 74 65 20 20 31 20 32 20 33  o compute  1 2 3
2240: 5d 20 20 20 20 20 20 3c 49 3e 3c 66 6f 6e 74 20  ]      <I><font 
2250: 73 69 7a 65 3d 22 2b 31 22 3e 26 23 38 35 39 34  size="+1">&#8594
2260: 3b 3c 2f 66 6f 6e 74 3e 20 70 72 69 6e 74 73 20  ;</font> prints 
2270: 26 71 75 6f 74 3b 37 26 71 75 6f 74 3b 20 61 66  &quot;7&quot; af
2280: 74 65 72 20 64 65 6c 61 79 3c 2f 49 3e 3c 2f 50  ter delay</I></P
2290: 52 45 3e 0d 0a 3c 48 33 3e 3c 41 20 4e 41 4d 45  RE>..<H3><A NAME
22a0: 3d 22 4d 39 22 3e 53 45 45 20 41 4c 53 4f 3c 2f  ="M9">SEE ALSO</
22b0: 41 3e 3c 2f 48 33 3e 0d 0a 3c 42 3e 3c 41 20 48  A></H3>..<B><A H
22c0: 52 45 46 3d 22 3f 6e 61 6d 65 3d 44 6f 63 3a 2b  REF="?name=Doc:+
22d0: 6f 6f 3a 3a 63 6c 61 73 73 22 3e 6f 6f 3a 3a 63  oo::class">oo::c
22e0: 6c 61 73 73 3c 2f 41 3e 3c 2f 42 3e 2c 20 3c 42  lass</A></B>, <B
22f0: 3e 3c 41 20 48 52 45 46 3d 22 3f 6e 61 6d 65 3d  ><A HREF="?name=
2300: 44 6f 63 3a 2b 6f 6f 3a 3a 64 65 66 69 6e 65 22  Doc:+oo::define"
2310: 3e 6f 6f 3a 3a 64 65 66 69 6e 65 3c 2f 41 3e 3c  >oo::define</A><
2320: 2f 42 3e 2c 20 3c 42 3e 3c 41 20 48 52 45 46 3d  /B>, <B><A HREF=
2330: 22 3f 6e 61 6d 65 3d 44 6f 63 3a 2b 6f 6f 3a 3a  "?name=Doc:+oo::
2340: 6f 62 6a 65 63 74 22 3e 6f 6f 3a 3a 6f 62 6a 65  object">oo::obje
2350: 63 74 3c 2f 41 3e 3c 2f 42 3e 2c 20 3c 42 3e 3c  ct</A></B>, <B><
2360: 41 20 48 52 45 46 3d 22 3f 6e 61 6d 65 3d 44 6f  A HREF="?name=Do
2370: 63 3a 2b 73 65 6c 66 22 3e 73 65 6c 66 3c 2f 41  c:+self">self</A
2380: 3e 3c 2f 42 3e 0d 0a 3c 48 33 3e 3c 41 20 4e 41  ></B>..<H3><A NA
2390: 4d 45 3d 22 4d 31 30 22 3e 4b 45 59 57 4f 52 44  ME="M10">KEYWORD
23a0: 53 3c 2f 41 3e 3c 2f 48 33 3e 0d 0a 63 61 6c 6c  S</A></H3>..call
23b0: 2c 20 6d 65 74 68 6f 64 2c 20 6d 65 74 68 6f 64  , method, method
23c0: 20 63 68 61 69 6e 0a 5a 20 30 31 30 39 33 34 37   chain.Z 0109347
23d0: 63 33 32 35 61 30 62 37 35 33 34 63 32 33 38 65  c325a0b7534c238e
23e0: 37 32 33 36 35 31 31 37 63 0a                    72365117c.