From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id QAA19725; Fri, 19 Sep 2003 16:21:59 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA15419 for ; Fri, 19 Sep 2003 16:21:58 +0200 (MET DST) Received: from cetus.henchmonkey.org (p67-70.acedsl.com [66.114.67.70]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h8JELvj23274 for ; Fri, 19 Sep 2003 16:21:57 +0200 (MET DST) Received: from katre by cetus.henchmonkey.org with local (Exim 3.36 #1 (Debian)) id 1A0M8y-0007uI-00 for ; Fri, 19 Sep 2003 10:21:56 -0400 Date: Fri, 19 Sep 2003 10:21:56 -0400 To: caml-list@inria.fr Subject: [Caml-list] Subclasses and pattern matching Message-ID: <20030919142156.GA30187@henchmonkey.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.4i From: katre X-Loop: caml-list@inria.fr X-Spam: no; 0.00; ocaml:01 inherit:01 inherit:01 rec:01 syntax:02 subclass:02 subclass:02 match:02 subclasses:02 subclasses:02 unit:03 string:03 string:03 identical:03 object:03 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Hello again! I'm working on a project where I want to create a list of data, which is all similar but not identical. In other languages with which I am familiar, I would do this with a base class and a few subclasses, as such: class virtual abstractClass = object method virtual to_string : unit -> string end class subclass1 = object inherit abstractClass method thing () = "subclass1 thing" method to_string () = "subclass 1" end class subclass2 = object inherit abstractClass method thing2 () = "subclass2 thing" method to_string () = "subclass 2" end And I would create the list as let l = [ (new subclass1 :> abstractClass); (new subclass :> abstractClass); (new subclass1 :> abstractClass); (new subclass2 :> abstractClass) ]; This seems to work fine. However, I want to use pattern matching to go over this list. I'm not sure how this would work in ocaml. My ideal function would look something like this: let rec show_list l = match l with [] -> () | (h ofclass subclass1)::t -> print_string (h#thing()); show_list t | (h ofclass subclass2)::t -> print_string (h#thing2()); show_list t | (h ofclass abstractClass)::t -> print_string ("Unknown object " ^ (h#to_string())); show_list t Is this possible? What would the syntax be? katre ------------------- 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