为了与c#互操作,我执行以下操作
namespace foo
type a = ...
module myhelper =
let d = ...
open myhelper
type b = ...
module myhelper = // module name duplication error
...
我想添加更多可以使用类型b的函数,所以我必须在类型b声明后编写它们,但我不想每次都创建一个新模块,我该怎么办?
全局模块可以提供帮助,但是,我不希望我的c#代码使用mymodule.a访问我的类型。所以我没有使用全局模块,而是使用全局命名空间
有没有更好的结构创意。
答案 0 :(得分:1)
这种微妙的相互依赖性往往会使你的图书馆在成长过程中变得棘手。 F#有助于防止这种情况,或者至少强制它是明确的。
根据您的缩写示例,您可以定义一个接口(myhelper
目标和b
实现)或使用相互递归类型:
type MyHelper =
static member M1() = ()
static member M2() = let b = B() in b.M4()
and B() =
member x.M3() = MyHelper.M1()
member x.M4() = ()