2016-09-13 7 views
2

私は#loadディレクティブの周り#if DEV ... #endifを削除する場合は、この#ifディレクティブをF#fsxファイルに入れることは可能でしょうか?

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

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

callSomethingFromMyFile()作品をやろうFSXファイルを持っています。

これは奇妙なことかもしれませんが、私はF#をjsにコンパイルするために寓話を使用しており、jsファイルサイズを減らすためにプロダクション "ビルド"を除外する場合はファイルを除外したいからです。

+0

あなたは '#load'ではなく' open MyFile.fs'を試しましたか? – s952163

+0

明らかに 'open MyFile'でなければなりません。もしあなたがFSI' #if INTERACTIVE'で作業しているのであれば、これらのステートメント(#loadを含む)をラップさせることもできます。 – s952163

+0

@ s952163 fsi指令とf#コンパイラ/プリプロセッサ指令に違いがあることは、明らかにINTERACTIVE(ええと、fsiがショーを実行しているとき)です!#load作業のようなfsi指令です。 #loadはコンパイラ/プリプロセッサの命令ではないので、fsiの外部で何が起きるかは、funの世話をするコンパイラ/プリプロセッサだけです。 –

答えて

1

アイブ氏は、次のPRでこれを固定:https://github.com/fable-compiler/Fable/pull/429

あなたは現在、ちょうどそれがFSXファイルに対して、これは、現在行われていませんでしたインタラクティブチェッカーに定義を渡すことができます。

2

「 あなたは、コンパイラを実行している場合は利用できませんF#インタラクティブでスクリプトを実行している場合、一部のディレクティブが利用可能です。次の表に、F#インタラクティブを使用している場合に使用可能ですディレクティブをまとめた。 」

https://docs.microsoft.com/en-us/dotnet/articles/fsharp/tutorials/fsharp-interactive/index#differences-between-the-interactive-scripting-and-compiled-environments

テーブルには#loadが含まれています。そのテキスト(コンパイラとプリプロセッサ)は完全にはっきりしませんが、それも意味があります。

2

通常のF#スクリプトでは、寓話が処理できないようです。予想通りfsharpi --define:DEV --exec script.fsx作品を実行している

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

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

MyModule.fs:

module MyModule 
type A = {b: string} 

script.fsx

が、それは通常のF#で動作することを確認するために私は、ファイルに以下を作成しました。私はWindows上のfsiも同様に動作すると期待しています。

関連する問題