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 :

This expression has type unit but is here used with type string


Sujet :

Caml

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Par défaut This expression has type unit but is here used with type string
    Bonjour,

    j'ai fais un petit programme qui se connecte à un serveur IRC, le seul problème ( pour l'instant ) est que je n'arrive pas à répondre aux ping, mon code me renvoye une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      try
        Str.search_forward (Str.regexp "^PING :") r 0; (* Ligne 26 *)
        let pong_answer = List.hd (Str.split (Str.regexp "PING :") r) in
        output_string oc "PONG :"^ pong_answer  ^"\n"; (* Ligne 28 *)
        print_string "\n\nPING -> PONG\n\n"
      with Not_found -> ();
    Me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $ ocaml unix.cma str.cma irc.ml
    [...]
    File "Lilith.ml", line 26, characters 4-49:
    Warning S: this expression should have type unit.
    File "Lilith.ml", line 28, characters 4-29:
    This expression has type unit but is here used with type string
    Quelqu'un aurais une solution ?
    Merci .

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Par défaut
    # Str.search_forward ;;
    - : Str.regexp -> string -> int -> int = <fun>
    (** ..... Return the position of the first character of the matched substring ... *)

    let pos = Str.search_forward (Str.regexp "^PING :") r 0 in

    et si tu n'as pas besoin du résultat pos, utilise :
    let _ = Str.search_forward (Str.regexp "^PING :") r 0 in
    ou
    ignore(Str.search_forward (Str.regexp "^PING :") r 0);

    ===============================

    il faut entourer de parenthèses le résultat de concaténation de chaînes :

    output_string oc ("PONG :"^ pong_answer ^"\n");

    souvent quand tu as une erreur dans un fichier tu peux vérifier plus simplement en recopiant la ligne dans le top-level, et le top-level te soulignera l'endrois de l'erreur :
    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # let oc = stdout ;;
    val oc : out_channel = <abstr>
    # output_string oc "PONG :"^ pong_answer  ^"\n";;
    This expression has type unit but is here used with type string
    # output_string oc ("PONG :"^ pong_answer  ^"\n") ;;
    PONG :HELLO
    - : unit = ()

    comme tu le vois l'expression est comprise comme si les parenthèses étaient comme ceci :

    (output_string oc "PONG :") ^ pong_answer ^"\n";

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Par défaut
    Merci .

  4. #4
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Citation Envoyé par fgjdfgjdgj Voir le message
    souvent quand tu as une erreur dans un fichier tu peux vérifier plus simplement en recopiant la ligne dans le top-level, et le top-level te soulignera l'endrois de l'erreur :
    Mieux encore : on peut utiliser un véritable environnement de développement. Par exemple Emacs te permet de compiler (fonction "compile"), de surligner l'erreur dans ton code et de déplacer ton curseur là où il faut (fonctions "next-error" et "previous-error").

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/09/2013, 12h33
  2. Réponses: 4
    Dernier message: 26/06/2012, 09h13
  3. [OCaml] Error: This expression has type..
    Par jamboo dans le forum Caml
    Réponses: 6
    Dernier message: 14/11/2010, 19h09
  4. Réponses: 1
    Dernier message: 12/07/2007, 15h30
  5. Type unit, type string, match with
    Par lioudow dans le forum Caml
    Réponses: 8
    Dernier message: 12/02/2007, 17h12

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