[
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: | 2001-10-29 (19:32) |
From: | Andrew Lawson <andrew@a...> |
Subject: | Re: [Caml-list] Passing self to a new object |
On Mon, Oct 29, 2001 at 06:02:07PM +0900, Jacques Garrigue wrote: > From: Andrew Lawson <andrew@absentis.com> > > > I'm writing a gui program where the callback for a button > > creates a new object (also a gui) and needs to pass it a reference to > > itself in order that the new object can contact the original for > > information. The classes look something like this; > > > > class xyz = > > let top = ... in > > let ... = ... in > > object (self) > > method btnNew = ... ~command:(fun () = new abc self) top in > > ... > > ... > > end > > > > and abc (parent:xyz) = > > object (self) > > var myparent = parent > > ... > > end > > > >My error is; > > ..... > > Self type cannot escape its class > > You've bumped into a painful quirk of ocaml's object system: self's > type is not xyz, and must be handled with care. Ouch, I knew that even such an otherwise nice language would turn out to have some fuzzy bits someday :) > (By the way, your program seemed strange, since you were using self > and abc before defining them, but I suppose it was a copy error, and I > corrected it.) I admit this was a quick example of the problem, not the program itself, which has many more hairy bits. > The general solution to this is to first define a class type: > class type xyz_t = object ('self) > method > btnNew : ... > ... > end Well this gives me an excuse to start playing with types and interfaces anyway. Is this a 'known problem, will be sorted eventually' or a 'just live with it' sort of thing? > Then change the code in btnNew to > new abc (self :> xyz_t) Casting! and here was I giving a C++ programmer some abuse about this last week :) > Remark that making xyz_t exact may be a bit lengthy, but you may leave > out methods you don't need to call from abc. Well, thats not so bad then ... I suppose good style should ahve me doing this anyway. > Hope this helps, Most definitely > Jacques Garrigue Thanks very much Andrew -- Andrew Lawson andrew@absentis.com ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr