IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

[OCaml][Débutant]Passer d'un matching de variant à un matching de structure


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut [OCaml][Débutant]Passer d'un matching de variant à un matching de structure
    À l'origine, une librairie me fournit des types variants déclarés comme suit:
    type data = Int of int | Str of string;;
    type oper = Var of data * Type of int | Con of data * Type of int;;

    Que je matchais facilement pour mes besoins:
    match var with
    | Con(Int(i),_) -> process_con_int(i)
    | Var(Str(s),_) -> process_var_str(s)
    | _ -> ()

    Le type data a ensuite evolué dans la librairie comme suit:
    type data = {id: int; val: data_core;}
    type data_core = Int of int | Str of string;;

    Du coup je ne sais plus faire le match:
    match var with
    | Con(?????,_) -> process_con_int(i)
    | Var(?????,_) -> process_var_str(s)
    | _ -> ()

    Que mettre à la place des ????? pour obtenir le même résultat qu'avant ?

    J'ai bien pensé à imbriquer les matchs:
    match var with
    | Con(d,_)
    | Var(d,_) -> (
    match d.val with
    | Int(i) -> process_con_int(i)
    | Str(s) -> process_var_str(s))
    | _ -> ()

    Mais je me demandais s'il y avait moyen de faire cela avec un seul match, juste en modifiant les ????? pour obtenir la même forme de code qu' au début.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    match var with
    | Con({val=Int i}, _) -> ...
    la forme générale est {champ = motif; champ = motif; ...}

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    Ca match quelque soit la valeur des autres champs de la structure (id) ? impec, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] débutant passer un objet en paramètre
    Par samplaid dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/05/2006, 12h46
  2. Réponses: 9
    Dernier message: 21/02/2006, 09h06
  3. [Débutant]Passer une classe abstraite en paramètre
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 06/01/2006, 17h56
  4. [OCaml][Débutant] Graphiques
    Par mavina dans le forum Caml
    Réponses: 1
    Dernier message: 04/11/2005, 20h12
  5. Réponses: 2
    Dernier message: 03/10/2005, 22h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo