是否可以将#load指令放在F#fsx文件中的#if指令中?

时间:2016-09-13 20:44:49

标签: f# f#-interactive fable-f#

我有一个fsx文件,我尝试这样做

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

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

callSomethingFromMyFile()如果删除#if DEV ... #endif指令周围的#load,则有效。

我意识到这可能是一个奇怪的事情,但这是因为我使用寓言编译为F#到js,如果我想在生成“build”时排除文件以减少js文件大小。

3 个答案:

答案 0 :(得分:3)

在普通的F#脚本中,有可能,似乎寓言无法处理它。

要验证它是否在常规F#中工作,我在文件中创建了以下内容:

MyModule.fs:

datalength()

script.fsx:

module MyModule
type A = {b: string}

正在运行#if DEV #load "./MyModule.fs" #endif #if DEV open MyModule printfn "Hello A: %A" {b = "yolo"} #endif printfn "Done" 按预期工作。我希望Windows上的fsharpi --define:DEV --exec script.fsx能够正常运行。

答案 1 :(得分:2)

" 当您在F#Interactive中执行脚本时,某些指令可用,这些指令在执行编译器时不可用。下表总结了使用F#Interactive时可用的指令。 "

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

然后该表列出了#load等。不完全清楚文本(编译器与预处理器),但它也有意义......

答案 2 :(得分:1)

我已在以下PR中解决了这个问题:https://github.com/fable-compiler/Fable/pull/429

您现在可以将定义传递给交互式检查器,它只是针对目前尚未完成的fsx文件。