Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Subclasses and pattern matching
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: art yerkes <ayerkes@s...>
Subject: Re: [Caml-list] Subclasses and pattern matching
On Fri, 19 Sep 2003 11:22:52 -0400
katre <katre@henchmonkey.org> wrote:

> Richard Jones wrote:
> > 
> > Possibly I'm being dumb here, but wouldn't it be better to use
> > a union type, eg:
> > 
> > type num = Int of int | Float of float
> > 
> 
> Yes, except for two facts:
> 
> a) Each different type has different data available (some are ints, some
> strings, some more complex)
> b) Each different type has a lot of data.  I don't really want to
> specify a 10-member tuple for each constructor :)
> c) Where the data is used, I want to match two or three different types,
> and then call a default method with anything left over.  With a union, I
> have to deal with every possible type, or do nothing with the data.
> 
> To clarify, using your type above, I can't do
> 
> match n with
>     Int(i) -> print_int i
>     | _ -> print_int some_data_from_n
> 
> Remember, all of my structures have many more than 1 piece of data.  A
> class inheritance really is the best way to model the data structure, I
> just want to be able to pattern match on it.
> 
> katre
> 

You could wrap your items in a union:

exception NoExternalRepForBase

type 'a base_extern_t = 
        Derived1 of 'a | Derived2 of 'a

class virtual base =
object
	method virtual as_external : unit -> base base_extern_t
end

class derived1 =
object(self)
	inherit base
	method as_external () = Derived1 (self :> base)
end

class derived2 =
object(self)
	inherit base
	method as_external () = Derived2 (self :> base)
end

let l = [ (new derived2 # as_external()) ; (new derived1 # as_external()) ]
-- 
"Should array indices start at 0 or 1? My compromise of 0.5 was rejected
 without, I thought, proper consideration."
   - S. Kelly-Bootle

-------------------
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