Bonjour à tous !
Suite à une suggestion de InOCamlWeTrust sur un autre fil de discussion, j'ai commencé dans mon coin un embryon de bibliothèque standard avec des objets. Je dis que c'est un embryon parce qu'il n'y a pour l'instant que le module String... je tiens à vous faire part d'emblée de la chose avant d'aller plus loin, comme ça je pourrais prendre en compte les remarques dès le début. Bien évidemment le but est que tous les modules passent petit à petit à la moulinette à objets .
Fichier d'implémentation (oString.ml) :
Fichier d'interface (oString.mli) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 class ostring ?(init = "") () = object(self : 'a) val me = init method get = String.get me method set = String.set me method copy = {< me = String.copy me >} method fill = String.fill me method length = String.length me (* non tail-rec à cause de List.map... bien ou mal ? *) method concat (l : 'a list) = {< me = String.concat me (List.map (fun obj -> obj#to_string) l) >} method sub ~pos ~len = String.sub me pos len method iter f = String.iter f me method escaped = {< me = String.escaped me >} method index = String.index me method rindex = String.rindex me method index_from = String.index_from me method rindex_from = String.rindex_from me method contains = String.contains me method contains_from = String.contains_from me method rcontains_from = String.rcontains_from me method uppercase = {< me = String.uppercase me >} method lowercase = {< me = String.lowercase me >} method capitalize = {< me = String.capitalize me >} method uncapitalize = {< me = String.uncapitalize me >} method compare (o1 : 'a) (o2 : 'a) = String.compare o1#to_string o2#to_string method to_string = me method of_string x = {< me = x >} end let create n = new ostring ~init:(String.create n) () let make n c = new ostring ~init:(String.make n c) () let of_string init = new ostring ~init ()
Voilà. Je posterai prochainement d'autres modules, afin que nous puissions voir ce qu'il convient le mieux de faire pour les faire cohabiter dans la joie et la bonne humeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 class ostring : ?init:String.t -> unit -> object ('a) method capitalize : 'a method compare : 'a -> 'a -> int method concat : 'a list -> 'a method contains : char -> bool method contains_from : int -> char -> bool method copy : 'a method escaped : 'a method fill : int -> int -> char -> unit method get : int -> char method index : char -> int method index_from : int -> char -> int method iter : (char -> unit) -> unit method length : int method lowercase : 'a method of_string : String.t -> 'a method rcontains_from : int -> char -> bool method rindex : char -> int method rindex_from : int -> char -> int method set : int -> char -> unit method sub : pos:int -> len:int -> string method to_string : String.t method uncapitalize : 'a method uppercase : 'a end val create : int -> ostring val make : int -> char -> ostring val of_string : String.t -> ostring
Cordialement,
Cacophrène
Partager