2009-05-10 45 views
1

我有以下的命名空間/班一個C#庫:如何使用F#中的多個文件和C#庫?

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

我曾經引用說庫中的F#項目,當我嘗試調用的方法之一,我得到:

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

這是方法調用不工作的一個例子:

#light 

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

我是否缺少明顯的東西?使用開放式助手也不起作用,奇怪的是IntelliSense確實有效,它列出了Util類中的每個方法。

此外,在同一個項目中的其他文件的某些文件中調用函數的標準做法是什麼?我不想創建完整的對象來訪問一些函數。

回答

3

關於多個文件,請參見「Using multiple F# source files, and a useful debugging technique」的第一部分以及「Sneak peeks into the F# project system, part three」的最後部分。前者討論了文件中的頂級代碼如何隱式地進入與文件名同名的模塊中,而後者討論瞭如何在項目中排序文件(因爲您只能看到上面/之前聲明的內容)。

+0

謝謝,這就是我需要的。雖然我不能在沒有明確定義模塊的情況下調用我的函數,但它起作用並且這很重要。 – sker 2009-05-10 05:24:20

2

你的GetPrimes方法是什麼樣的?它的工作對我來說...

我有一個C#庫包括這個代碼的解決方案:

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

,並從引用這樣的C#項目的F#項目稱之爲:

#light 

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

嗨,我設法隔離問題,我現在可以調用C#方法。問題是我無法將聲明發送給FSI,但我可以編譯它並從主文件運行它。我想知道的是,如何在一個文件中定義函數並從另一個文件中調用它們?最好不要創建類/對象。我在互聯網上找不到任何東西。 – sker 2009-05-10 04:02:04

相關問題