REBOL [
Title: "Clone"
Date: 3-Jul-2002
Name: Clone
Version: 1.0.0
File: %Clone.r
Author: "Andrew Martin"
Purpose: "Clone objects by copying objects inside."
Email: Al.Bri@xtra.co.nz
Web: http://valley.150m.com
Category: [util 4]
Acknowledgements: "Erin A. Thomas"
Example: [
New_object: Clone Original_Object []
]
Bug!: [
Clone destroys 'bind information during copy/deep of block!s!!!!
]
]
Clone: function [
{Clones all sub-objects and hashes, so there are no multiple references.}
[catch]
Object [object!] "The object to clone."
Block [block!] "Extra code for this object."
][
Cloned Member
][
throw-on-error [
Cloned: make Object Block
foreach Word next first Object [
Member: get in Cloned :Word
if same? :Member get in Object :Word [
set in Cloned :Word either object? :Member [
Clone :Member []
][
either any [
series? :Member
port? :Member
bitset? :Member
][
copy/deep :Member
][
:Member
]
]
]
]
Cloned
]
]