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

F# Discussion :

Découverte et affaire de modules


Sujet :

F#

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut Découverte et affaire de modules
    Bonjour à tous.
    N'ayant jamais pratiqué le moindre langage fonctionnel qui soit et y voyant en général le Mal, j'ai tenté quand même le pas avec F#, ce qui me permettait de rester dans un environnement connu. Hé bien je dois dire que je tiens encore après plus d'une semaine d'immersion complète !
    J'y vois deux raisons : tout d'abord c'est nouveau, complètement nouveau pour moi, une bonne raison de m'y plonger avec intérêt; et ensuite les défis à relever sont intéressants (c'est totalement incompréhensible... ), donc j'y reste, question de fierté personnelle ! Nan mé...

    Reste que les modules me jouent des tours et que j'aurais besoin des lumières d'un savant!
    Je suis en Windows XP SP3 avec Visual Studio 2010 Shell, F# 2.0.0.0 et Dotnet 4.0.30319, ce qui semble assez moderne.

    Problème 1:
    Citation Envoyé par LLB Voir le message
    Chaque fichier (sauf le main) doit indiquer son nom de module ou namespace (au lieu de prendre le nom du fichier).
    (Extrait d'un message pour la dernière livraison en 1.9.quelque-chose)
    D'après mes essais (dans la configuration citée ci-dessus), il faut aussi le module dans le main, faute de quoi on a:
    Erreur 1 Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'
    Problème 2:
    Voici mes 2 fichiers, Program.fs et Truc.fs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    module Program
    open System
    open Truc
    let a = Truc.N  //Test avec le préfixe Truc
    let b = F 100   //Test sans le préfixe Truc
    let c = Truc.Chouette.A //Test avec
    let d = Chouette.A      //Test sans
    printfn "a = %d, b = %d" a b
    Console.ReadLine() |> ignore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    module Truc
    let N = 1234
    let F x = x + 1
     
    module Chouette =
      let A = 123
    Tout ce que j'affiche en rouge est rejeté par Visual Studio avec le message "Erreur 1 The namespace or module 'Truc' is not defined" ou identique. A noter qu'il trouve bien System...
    Donc, je résume: dès que je veux utiliser plus d'un fichier.fs, il faut mettre des modules, et pourtant il ne les voit pas. Kessifokejfai ?
    Merci
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  2. #2
    Max.Adorable
    Invité(e)
    Par défaut
    Salut Thorna,

    En ce qui concerne le fichier main, je pense que LLB parlait du fichier qui contient le point d'entrée du programme. L'équivalent du Main en C#.
    Plus d'info ici, http://research.microsoft.com/en-us/...#_Toc270597618.

    Pour ton problème de module, essaye de cette manière:

    fichier2 (Truc.fs -> le nom du fichier est en général le nom du namespace/module défini dans ce dernier.):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    namespace Truc
     
    let N = 1234
    let F x = x + 1
     
    module Chouette =
      let A = 123
    fichier1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    open System
    open Truc
     
    [<EntryPoint>]
    let main args = 
      let a = Truc.N  //Test avec le préfixe Truc
      let b = F 100   //Test sans le préfixe Truc
      let c = Truc.Chouette.A //Test avec
      let d = Chouette.A      //Test sans
      printfn "a = %d, b = %d" a b
      Console.ReadLine() |> ignore
    Note bien que dans ta solution VS2010 le fichier2 doit être avant le fichier1.

    Pour utiliser ce code dans la console interactive, généralement via le fichier script.fsx, tu dois charger le fichier du module/namespace désiré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #load "Truc.fs"
     
    open System
    open Truc
     
    let a = Truc.N  //Test avec le préfixe Truc
    let b = F 100   //Test sans le préfixe Truc
    let c = Truc.Chouette.A //Test avec
    let d = Chouette.A      //Test sans
    printfn "a = %d, b = %d" a b
    Console.ReadLine() |> ignore
    Voilà quelques pistes qui j'espère résoudront ton problème. Si ce n'est pas le cas on t'aidera avec plaisir.

    Max.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut
    Nom de Zeus (de nom de Zeus), comme disait un parent éloigné...
    Citation Envoyé par Max.Adorable Voir le message
    Note bien que dans ta solution VS2010 le fichier2 doit être avant le fichier1.
    Et en plus, j'ai lu ça quelque part... Mais ça ne m'avait pas paru si clair que ça, d'autant que je n'ai pas l'habitude que l'ordre importe et que je ne voyais vraiment pas comment forcer un ordre quelconque dans Visual Studio... Tout simplement parce que dans ma version habituelle de VS C# 2010 Express, non seulement l'ordre n'importe pas mais en plus on ne peut pas le changer ! Et voilà qu'en cliquant-droit sur program.fs, je vois Move Up et Move Down, et même mieux : Add Above, Add Below, options qu'on ne voit pas en cliquant-droit sur le nom de la solution...
    Alors après ça, tout rentre dans l'ordre tout seul : pas besoin de [<EntryPoint>] ni de let main args =, tout fonctionne du premier coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    module Truc //Obligatoire
    let N = 1234
    let F x = x + 1
    module Chouette =
      let A = 123
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    open Truc
    open System
     
    let a = Truc.N  //Test avec le préfixe Truc
    let b = F 100   //Test sans le préfixe Truc
    let c = Truc.Chouette.A //Test avec
    let d = Chouette.A      //Test sans
    printfn "a = %d, b = %d" a b
    printfn "c = %d, d = %d" c d
    Console.ReadLine() |> ignore
    Citation Envoyé par Max.Adorable Voir le message
    En ce qui concerne le fichier main, je pense que LLB parlait du fichier qui contient le point d'entrée du programme. L'équivalent du Main en C#.
    Oui, j'avais bien compris ça comme ça, mais là encore, plus besoin du nom de module comme je l'avais cru.
    Un grand merci, ça m'apprendra à lire les lignes en petits caractères en bas des pages...
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  4. #4
    Max.Adorable
    Invité(e)
    Par défaut
    Salut,

    En effet il faut connaitre le move up/move down, maintenant tu ne l'oubliera plus jamais je pense ^^.

    Max.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/11/2014, 16h59
  2. Module FTP.pm ?
    Par MSP dans le forum Modules
    Réponses: 4
    Dernier message: 04/08/2003, 15h49
  3. module Find
    Par martijan dans le forum Modules
    Réponses: 8
    Dernier message: 09/07/2003, 11h07
  4. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  5. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

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