3

C#と相互運用するために、私は次のことを行います

namespace foo

type a = ...

module myhelper =
    let d = ...

open myhelper

type b = ...

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

タイプbを使用できる関数をさらに追加したいので、タイプb宣言の後にそれらを作成する必要がありますが、毎回新しいモジュールを作成したくないのですが、どうすればよいですか?

グローバルモジュールが役立つ可能性がありますが、mymodule.aを使用してc#コードが自分の型にアクセスすることは望ましくありません。したがって、グローバルモジュールではなく、グローバル名前空間を使用しました

より良い構造のアイデアはありますか?

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 に答える