Browse thread
RE: [Caml-list] Deep copy
- zze-MARCHEGAY Michael stagiaire FTRD/DTL/LAN
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | zze-MARCHEGAY Michael stagiaire FTRD/DTL/LAN <michael.marchegay@r...> |
| Subject: | RE: [Caml-list] Deep copy |
> De : Eray Ozkural [mailto:erayo@cs.bilkent.edu.tr]
> Envoyé : lundi 15 juillet 2002 17:03
>
>
> On Monday 15 July 2002 13:06, zze-MARCHEGAY Michael stagiaire
> FTRD/DTL/LAN
> wrote:
> > Hi all,
> >
> > I'm writting a program that manipulates a graph structure
> and I need to
> > make deep copies of some of the graph nodes. The function
> Oo.copy donesn't
> > perform a deep copy and I haven't found any other that
> could make it.
>
> You mean something like creating a new object on the heap and
> copying over the
> contents of an existing object.
>
> If this were C++ all you had to do would be invoking the copy
> constructor
> Node* x = new Node(old_node);
>
> From the documentation OO.copy does look like a deep copy operation:
>
> val copy : < .. > -> < .. >
> Oo.copy o returns a copy of object o, that is a fresh object
> with the same
> methods and instance variables as o
In fact, if an object 'a' contains an attribute 'b' that is another
object, Oo.copy on 'a' gives a copy of 'a' in which the attribute
'b' is **physically** equal to the copied attribute from 'a'.
Example:
class a =
object
val mutable b = new b
method get_b = b
end
and b =
object
val mutable c = "1"
method set_c x = c <- x
method print_c = print_string ("c=" ^ c ^ "\n")
end
let aa = new a
let aa' = Oo.copy aa
let _ =
aa#get_b#set_c "3";
aa#get_b#print_c;
aa'#get_b#print_c
gives:
c=3
c=3
whereas a deep copy would give:
c=3
c=1
>
> Curious,
>
> --
> Eray Ozkural <erayo@cs.bilkent.edu.tr>
> Comp. Sci. Dept., Bilkent University, Ankara
> www: http://www.cs.bilkent.edu.tr/~erayo
> GPG public key fingerprint: 360C 852F 88B0 A745 F31B EA0F
> 7C07 AE16 874D 539C
>
>
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners