From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id PAA27643 for caml-redistribution; Tue, 6 Oct 1998 15:38:13 +0200 (MET DST) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id OAA00390; Tue, 6 Oct 1998 14:23:03 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id OAA10298; Tue, 6 Oct 1998 14:23:02 +0200 (MET DST) Received: from isis.lip6.fr (isis.lip6.fr [132.227.60.2]) by nez-perce.inria.fr (8.8.7/8.8.7) with ESMTP id OAA12387; Tue, 6 Oct 1998 14:23:00 +0200 (MET DST) Received: from spi.lip6.fr (monbazillac.lip6.fr [132.227.82.65]) by isis.lip6.fr (8.8.8/jtpda-5.2.9.1+lip6) with ESMTP id OAA02774 ; Tue, 6 Oct 1998 14:22:59 +0200 (MET DST) Received: from ventoux.lip6.fr (root@ventoux.lip6.fr [132.227.83.34]) by spi.lip6.fr (8.8.6/jtpda-5.2) with ESMTP id OAA28881 ; Tue, 6 Oct 1998 14:22:58 +0200 (MET DST) Received: from ventoux.lip6.fr (boulme@localhost [127.0.0.1]) by ventoux.lip6.fr (8.8.8/jtpda-5.2) with ESMTP id OAA13442 ; Tue, 6 Oct 1998 14:35:02 +0200 Message-Id: <199810061235.OAA13442@ventoux.lip6.fr> X-Mailer: exmh version 1.6.9 05/05/96 To: Serge Fantino cc: caml-list@inria.fr, Vyskocil Vladimir , caml-light@inria.fr Subject: Re: port des d finitions des variables de classe In-reply-to: Your message of "Mon, 05 Oct 1998 16:10:07 BST." <3618E14F.217B0EE1@math.unice.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Tue, 06 Oct 1998 14:35:01 +0200 From: "Sylvain BOULM'E" Sender: weis Bonjour, Il me semble que c'est dans la semantique des classes de Ocaml, qui supportent desormais les "variables statiques de classes" partagees par tous les objets de la classe. (Les gens de Ocaml me corrigeront ...) Ainsi, class test1 = object val v = ref 5 method get = !v method set x = v:=x end;; est equivalent a class test1 = let v1=ref 5 in object val v=v1 ... Dans les 2 cas, let a=new test1 and b=new test1 in (b#set 4; a#get);; retourne 4. Par contre c'est different de class test2 () = let v1=ref 5 in object val v=v1 ... let a=new test2 () and b=new test2 () in (b#set 4; a#get);; retourne 5. Encore mieux, let f=new test2;; retourne val f : unit -> test2 = Une classe sert en fait a generer (au travers du new) des fonctions a valeur dans les objets (de cette classe). Et comme pour les autres fonctions de Caml, on a la possibilite d'utiliser des variables locales... Sylvain. PS: j'aurai pu ecrire aussi test2 sous la forme class test2 () = object val v=ref 5 ... Il est aussi interessant de remarquer que class test3 = object val mutable v = 5 method get = v method set x = v<-x end;; let a = new test3 and b=new test3 in (b#set 4; a#get);; retourne 5