2016-09-13 14 views
2

我有一個FSX文件,其中我嘗試,如果我刪除#if DEV ... #endif圍繞#load指令,要做到這一點應該可以將#load指令放在F#fsx文件中的#if指令內嗎?

#if DEV 
#load "MyFile.fs" 
#endif 

// Later in the file 
#if DEV 
callSomethingFromMyFile() 
#endif 

callSomethingFromMyFile()作品。

我意識到這可能是一個奇怪的事情,但它是因爲我使用寓言編譯爲F#到js,並且如果我想在生成「構建」時排除文件以減少js文件大小。

+0

你有沒有嘗試'#加載'但是'打開MyFile.fs'? – s952163

+0

明顯應該是'打開MyFile',如果你只是在FSI工作'#if INTERACTIVE'會讓你包裝這些語句(包括#load)。 – s952163

+0

@ s952163問題的關鍵在於fsi指令和f#編譯器/預處理器指令之間存在差異,所以顯然當在INTERACTIVE(是的,fsi正在運行show!)fsi指令(如#load工作)時。在fsi之外發生的情況是,只有編譯器/預處理器負責處理funs時,是一件完全不同的事情,因爲#load不是編譯器/預處理器指令。 –

回答

2

在常規的F#腳本中,它是可能的,它似乎像寓言不處理它。

要驗證它工作在常規F#我創建瞭如下的文件:

MyModule.fs:

module MyModule 
type A = {b: string} 

script.fsx:

#if DEV 
#load "./MyModule.fs" 
#endif 

#if DEV 
open MyModule 
printfn "Hello A: %A" {b = "yolo"} 
#endif 
printfn "Done" 

運行fsharpi --define:DEV --exec script.fsx作品如預期。我預計Windows上的fsi也可以工作。