2009-05-10 10 views
1

J'ai une bibliothèque C# avec l'espace de noms/classe suivante:Comment travailler avec plusieurs fichiers et bibliothèques C# en F #?

namespace Helper 
{ 
    public static class Util 
    { 
     /*static methods*/ 
    } 
} 

J'ai référencé ladite bibliothèque dans un projet F # et quand je tente d'appeler une des méthodes que je reçois:

error FS0039: The namespace or module 'Helper' is not defined. 

Ceci est un exemple de l'appel de méthode ne fonctionne pas:

#light 

let a = Seq.skip 1000 (Helper.Util.GetPrimes 200000);; 

Est-ce que je manque quelque chose d'évident? L'utilisation de Helper ouvert ne fonctionne pas non plus, et la chose étrange est que IntelliSense fonctionne, il liste toutes les méthodes de la classe Util.

En outre, quelle est la pratique standard pour appeler des fonctions dans certains de mes fichiers à partir d'autres fichiers dans le même projet? Je ne veux pas créer des objets complets juste pour accéder à quelques fonctions.

Répondre

3

En ce qui concerne les fichiers multiples, voir la première partie de "Using multiple F# source files, and a useful debugging technique", ainsi que la dernière partie de "Sneak peeks into the F# project system, part three". Le premier explique comment le code de haut niveau dans un fichier va implicitement dans un module du même nom que le nom de fichier, tandis que le second explique comment commander les fichiers dans le projet (puisque vous ne pouvez voir que les choses déclarées ci-dessus).

+0

Merci, c'est ce dont j'avais besoin. Bien que je ne pouvais pas appeler mes fonctions sans définir explicitement le module, mais cela fonctionne et c'est ce qui compte. – sker

2

À quoi ressemble votre méthode GetPrimes? Il fonctionne pour moi ...

J'ai une solution avec une bibliothèque C# y compris ce code:

namespace Scratch 
{ 
    public static class Util 
    { 
     public static IEnumerable<int> GetNumbers(int upto) 
     { 
      int i = 0; 
      while (i++<upto) yield return i; 
     } 
    } 
} 

et de l'appeler d'un projet F # qui fait référence au projet C# comme ceci:

#light 

let p = Seq.skip 1000 (Scratch.Util.GetNumbers 2000000);; 
+0

Salut, j'ai réussi à isoler le problème, je peux appeler la méthode C# maintenant. Le problème était que je ne pouvais pas envoyer l'instruction à FSI, mais je peux la compiler et l'exécuter à partir du fichier principal. Qu'est-ce que je voudrais savoir, comment puis-je définir des fonctions dans un fichier et les appeler à partir d'un autre fichier? De préférence, ne pas créer de classes/objets. Je n'ai rien trouvé sur Internet. – sker

Questions connexes