Message-Id: <199810061235.OAA13442@ventoux.lip6.fr>
To: Serge Fantino <fantino@math.unice.fr>
Subject: Re: port des d finitions des variables de classe
Date: Tue, 06 Oct 1998 14:35:01 +0200
From: "Sylvain BOULM'E" <Sylvain.Boulme@lip6.fr>
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 = <fun>
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
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:16 MET