Ocaml

safa -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

est ce que vous pouvez m'expliquer la difference entre
type vtypes = IntV of int | StringV of string
et
type stypes = Int | String

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
Il faut bien distinguer l'utilisation des minuscules et des majuscules.

Quand tu fais "Int | String", avec des majuscules, Int et String sont des mots-clés, ce ne sont pas les types usuels int et string, en minuscules. Contrairement à la déclaration "IntV of int | StringV of string" où les mots-clés sont IntV et StringV, et les int et string sont bien les types, pour permettre d'avoir des valeurs associées aux mots clés.

Exemples :

let f = function Int -> "x" | String -> "y";; // val f : stypes -> string = <fun>

f Int;; // string = "x"
f String;; // string = "y"

let g = function IntV v -> (v,"") | StringV v -> (0,v);; // val g : vtypes -> int * string = <fun>

g (IntV 1);; // int * string = (1, "")
g (IntV 2);; // int * string = (2, "")

g (StringV "a");; // int * string = (0, "a")
g (StringV "b");; // int * string = (0, "b")
La confiance n'exclut pas le contrôle
0