gpt4 book ai didi

f# - 当通过 FSI 打开模块时,有什么方法可以强制加载模块吗?

转载 作者:行者123 更新时间:2023-12-05 01:16:29 25 4
gpt4 key购买 nike

如果我将下面的模块编译成一个dll

namespace MyNs
module SomeModule =
do printfn "module loading"
let x = 23

然后在 FSI 中引用 dll 并执行命令 open MyNs.SomeModule “模块加载”不会立即打印。它仅在我访问 x 时打印,这会导致所有顶级 let 和 do 绑定(bind)执行(我知道在 .NET 世界中的正常行为)。有没有什么办法,也许通过模块上的一个属性,我可以指示模块应该在 FSI 中打开时立即加载?

最佳答案

打开模块在运行时不会做任何事情。它只是将打开的命名空间中的所有符号放在打开语句下面的非限定访问范围内。

language spec 的第 12.5 节是您想要阅读的内容 - 此详细信息何时运行模块的静态初始化。

鉴于此,据我所知,唯一一次自动运行此初始化是针对 exe 中的最后一个模块。

即我认为没有直接的方法可以完成您想要的。

如果您对模块具有反射访问权限:

ModuleType.TypeInitializer.Invoke(null, null)

将调用静态初始化。

关于f# - 当通过 FSI 打开模块时,有什么方法可以强制加载模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5915092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com