Index: doc/example-scripts/rosetta-clone.html =================================================================== diff -u -r922c0ab9c756265f0793bda2cc69d50742c5bf88 -rc4f449cb353be812ba6502ef8e9587e87881f59b --- doc/example-scripts/rosetta-clone.html (.../rosetta-clone.html) (revision 922c0ab9c756265f0793bda2cc69d50742c5bf88) +++ doc/example-scripts/rosetta-clone.html (.../rosetta-clone.html) (revision c4f449cb353be812ba6502ef8e9587e87881f59b) @@ -1,874 +1,874 @@ - - - - - -Listing of doc/example-scripts/rosetta-clone.tcl - - - - - -
-
-

Rosetta example: Polymorphic copy

-
-

Let a polymorphic object contain an instance of some specific type S -derived from a type T. The type T is known. The type S is possibly -unknown until run time. The objective is to create an exact copy of -such polymorphic object.

- -
-
-
package req nx
-

nx::Object provides a method copy which creates a deep copy of any -source object (hence, polymorphic in the sense of this task), i.e., -it contains all structural and behavioral features of the source and -preserves its signature type.

-
-
-
nx::Class create T {
-    :property -accessor public {label "T"}
-}
-nx::Class create S -superclasses T {
-    :property -accessor public {label "S"}
-}
-
-set client [nx::Object new {
-    :public object method duplicate {src} {
-        # this is the polymorphic call site
-        return [$src copy]
-    }
-}]
-
-set t [T new]
-% $t label get
-T
-set s [S new]
-% $s label get
-S
-

Provide two copies, using copy underneath

-
-
-
set t2 [$client duplicate $t]
-set s2 [$client duplicate $s]
-

Are the copies truly independent objects (identities)? Yes …

-
-
-
% expr {$t2 ne $t}
-1
-% expr {$s2 ne $s}
-1
-

Are the copies offsprings of the source types/classes? Yes …

-
-
-
% $t info class
-::T
-% $t2 info class
-::T
-
-% $s info class
-::S
-% $s2 info class
-::S
-

Do the copies operate exactly like their source objects? Yes …

-
-
-
% $t label get
-T
-% $t2 label get
-T
-
-% $s label get
-S
-% $s2 label get
-S
-
-
-
-

- - - + + + + + +Listing of doc/example-scripts/rosetta-clone.tcl + + + + + +
+
+

Rosetta example: Polymorphic copy

+
+

Let a polymorphic object contain an instance of some specific type S +derived from a type T. The type T is known. The type S is possibly +unknown until run time. The objective is to create an exact copy of +such polymorphic object.

+ +
+
+
package req nx
+

nx::Object provides a method copy which creates a deep copy of any +source object (hence, polymorphic in the sense of this task), i.e., +it contains all structural and behavioral features of the source and +preserves its signature type.

+
+
+
nx::Class create T {
+    :property -accessor public {label "T"}
+}
+nx::Class create S -superclasses T {
+    :property -accessor public {label "S"}
+}
+
+set client [nx::Object new {
+    :public object method duplicate {src} {
+        # this is the polymorphic call site
+        return [$src copy]
+    }
+}]
+
+set t [T new]
+% $t label get
+T
+set s [S new]
+% $s label get
+S
+

Provide two copies, using copy underneath

+
+
+
set t2 [$client duplicate $t]
+set s2 [$client duplicate $s]
+

Are the copies truly independent objects (identities)? Yes …

+
+
+
% expr {$t2 ne $t}
+1
+% expr {$s2 ne $s}
+1
+

Are the copies offsprings of the source types/classes? Yes …

+
+
+
% $t info class
+::T
+% $t2 info class
+::T
+
+% $s info class
+::S
+% $s2 info class
+::S
+

Do the copies operate exactly like their source objects? Yes …

+
+
+
% $t label get
+T
+% $t2 label get
+T
+
+% $s label get
+S
+% $s2 label get
+S
+
+
+
+

+ + +