首页 文章

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

提问于
浏览
3

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

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

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

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

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

3 回答

  • 3

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

    您当前可以将定义传递给交互式检查器,它仅用于当前未执行的fsx文件 .

  • 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 能够正常运行 .

  • 1

    “当您在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等 . 不完全清楚文本(编译器与预处理器),但它也有道理......

相关问题