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

  1. 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