我有一个fsx文件,可用于项目的交互式开发。它会预加载所有dll,我还要模拟几个在FSI世界中应该表现不同的功能。

在fsx中,我有以下代码:

// #r needed dlls
open FSharp.Charting

module InteractiveUtil =
    let plotMe (c : ChartTypes.GenericChart) = c.ShowChart() |> ignore
    let logMe (c : string) = c |> printfn "%s"

现在在.fs文件中,我要使用它:
#if INTERACTIVE
#load "LiveInvestigationPreload.fsx"
open InteractiveUtil
#endif

但是当我尝试执行上面的代码片段时,我得到了



我还注意到,InteractiveUtil模块的定义如下所示:
namespace FSI_0009
  module InteractiveUtil = begin
    val plotMe : c:FSharp.Charting.ChartTypes.GenericChart -> unit
    val logMe : c:string -> unit
  end

因此FSI_0009是fsi为我创建的。

知道如何解决这个问题吗?

最佳答案

好的,我知道了。当我将顶级模块放在fsx的开头时,它起作用了。

module InteractiveUtil

#time
#r ...
open FSharp.Charting

let plotMe (c : ChartTypes.GenericChart) = c.ShowChart() |> ignore
let logMe (c : string) = c |> printfn "%s"

我本来可以删除问题,但由于我已经获得一票赞成,因此似乎其他人也对解决方案感兴趣。

关于f# - 在FSI中加载F#模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27409266/

10-10 19:16