[
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: | Didier Remy <Didier.Remy@i...> |
| Subject: | Re: creating fresh objects of type 'self |
> This works, of course:
>
> class parent = object (self : 'self)
> val mutable children : 'self list = []
> method add_fresh_object = children <- {<>} :: children
> end
>
> But this is not the intended result: now we have added a *copy* of
> the current object, not of its "fresh" state, i.e. the state it was in
> immediately after creation.
You could use an initializer to remember the "fresh" state in an instance
variable (using {< >}), and use a copy of that instance variable
in the method add_fresh_object.
class parent = object (self : 'self)
val mutable fresh = None
val mutable children : 'self list = []
method add_fresh_object =
let Some x = fresh in children <- Oo.copy x :: children
initializer fresh <- Some {< >}
end;;
Anyway, you have apparently found your own solution.
Best regards,
Didier