OCamlでインタフェースを作成する従来の方法は何ですか?インターフェイスファイルfoo.mli
と実装ファイルfoo.ml
を作成することで、1つの実装とのインターフェイスを持つことは可能ですが、同じインターフェイスに対して複数の実装を作成するにはどうすればよいですか?OCamlにおける複数の実装とのインタフェース
5
A
答えて
5
同じシグネチャに対して複数の実装を使用する場合は、コンパイル単位ではなくコンパイル単位内で、および必要に応じてモジュールで同様にシグネチャを定義します。その一例は、標準ライブラリにあります。その型のタイプと比較機能を持つモジュールを記述しOrderedType
署名は、この署名はset.mli
とmap.mli
の両方で定義されている
module type OrderedType = sig
type t
val compare : t -> t -> int
end
(あなたはそれを参照することができますSet.OrderedType
またはMap.OrderedType
のいずれかとしてください。署名は構造的です)。標準ライブラリには、この署名(String
,Nativeint
など)を持つコンパイル単位がいくつかあります。独自のモジュールを定義することもできます。モジュールを定義するときに特別な操作を行う必要はありません。タイプがt
での値がt -> t -> int
である限り、そのモジュールにはそのシグニチャがあります。標準ライブラリには少し精巧な例があります:Set.Make
ファンクタは、記号OrderedType
を持つモジュールを作成します。そうすれば、そのようなセットのセットを構築できます。
(* All four modules passed as arguments to Set.Make have the signature Set.OrderedType *)
module IntSet = Set.Make(module type t = int val compare = Pervasives.compare end)
module StringSet = Set.Make(String)
module StringSetSet = Set.Make(StringSet)
module IntSetSet = Set.Make(IntSet)
9
モジュールと署名を使用する必要があります。 .ml
ファイルは暗黙的にモジュールを定義し、.mli
はその署名を定義します。明示的なモジュールと署名を使用すると、いくつかの異なるモジュールに署名を適用できます。
オンラインブックの「OCamlによるアプリケーションの開発」のthis chapterを参照してください。
関連する問題
- 1. プリズムの実装におけるインタフェースの重要性
- 2. Actorモデルの実装における複数のApache HTTPクライアント
- 3. Ocamlの実装
- 4. の実装インタフェース
- 5. Python 2.7におけるisinstance関数のタプルとリストの実装
- 6. 城ウィンザーオート複数のインタフェースの登録とそれに対応する実装
- 7. 同じテストで複数のインタフェース実装をテストする - JUnit4
- 8. NHibernateは - 同じインタフェースを実装する複数の種類
- 9. 城ウィンザーMVCの同じインタフェースの複数の実装
- 10. インタフェースの実装 - パラメータ
- 11. インタフェースServiceConnectionの実装
- 12. インタフェースの複数の実装者。 OSGiはどうですか?
- 13. テンソルフローr1.0におけるアテンションデコーダの実装
- 14. ファサードの実装におけるConcurrentModificationException
- 15. Symbianにおけるサービスの実装
- 16. EJB Beanは複数のインタフェースを実装できますか?
- 17. スタックとキューの実装における操作の時間の複雑さ
- 18. 活字体関数インタフェースの実装
- 19. 階層インタフェースと実装
- 20. ユニット群のサブグループにおける離散対数のSAGE実装
- 21. インタフェースの実装の指定
- 22. C++の定義と実装におけるブロッキングとノンブロッキングI/O
- 23. 別個のインタフェースと実装emf ecore
- 24. インタフェースの実装方法は
- 25. 複数のクラスを参照する単一のJavaクラス/インタフェースを実装する
- 26. インタフェースを実装し、
- 27. テンソルフローにおけるRNNとLSTMの実装
- 28. インタフェースを実装した素数シーケンス(Java)
- 29. NHibernateにおける同時実行の実装
- 30. OCaml、Scala、Goの構造型の実装
書籍のリンクをありがとうございました。それは1つより多くの点で非常に有用でした。 –