Browse thread
[Caml-list] coercions from superclass to subclass?
-
Michael Vanier
- Alessandro Baretta
- Jacques Garrigue
[
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: | 2002-06-07 (10:47) |
From: | Jacques Garrigue <garrigue@k...> |
Subject: | Re: [Caml-list] coercions from superclass to subclass? |
From: Michael Vanier <mvanier@cs.caltech.edu> > I understand that there is no mechanism to coerce from a superclass to a > subclass in ocaml (i.e. the equivalent of C++'s run-time type > identification or java's instanceof operator). Are there any plans to add > such a capability in the future? The workaround was already posted. Look out Remi Vanicat's message for a space-safe implementation. Note that you need a coercion if you want to do it in an initializer class c () = object (self) initializer register (self :> c) method m = 1 end However this does not work with ocaml 3.04. You must write (self : < m : _ ; .. > :> c) enumerating all the methods. (self :> c) will work in ocaml 3.05. You can also choose to write a wrapper to the constructor let new_c () = let o = new c () in register o; o but this won't register automatically all subclasses. The moral reason for the absence of downcasts is not that this is unacceptable to use downcasts (yet, better to avoid it). The problem is that subtyping in ocaml is not by name, but by structure. Checking subtyping would require a complex run-time type (not available currently), and would be costly. Moreover, you may produce objects whose type is not fully known, making it even worse. Jacques Garrigue ------------------- 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