我们可以在同一个文件中扩展模块吗?

时间:2012-09-19 12:00:37

标签: f#

为了与c#互操作,我执行以下操作

namespace foo

type a = ...

module myhelper =
    let d = ...

open myhelper

type b = ...

module myhelper = // module name duplication error
    ...

我想添加更多可以使用类型b的函数,所以我必须在类型b声明后编写它们,但我不想每次都创建一个新模块,我该怎么办?

全局模块可以提供帮助,但是,我不希望我的c#代码使用mymodule.a访问我的类型。所以我没有使用全局模块,而是使用全局命名空间

有没有更好的结构创意。

1 个答案:

答案 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() = ()