3

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

namespace foo

type a = ...

module myhelper =
    let d = ...

open myhelper

type b = ...

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

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

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

有没有更好的结构思路。

4

1 回答 1

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() = ()
于 2012-09-19T14:31:41.917 回答