Version française
Home     About     Download     Resources     Contact us    
Browse thread
porté des définitions des variables de classe
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Sylvain BOULM'E <Sylvain.Boulme@l...>
Subject: Re: port des d finitions des variables de classe
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