我正在 OCaml 中开发一些算法,这些算法需要某些部分是“可插入的”,以便将部分计算留给特定的计算机。
举个例子,假设我有一个这样的签名:
module type Algorithm = sig
val feed : float -> unit
val nth : int -> (float -> float)
end
和两个不同的实现将是Alg1
和Alg2
。这个Algorithm
模块应该代表各种实现的接口,比如这两个。
现在我需要另一个组件,我们称它为Executor
使用Alg1
或Alg2
通过其接口的模块..
阅读函子似乎我应该需要一个函子,它接受一个Algorithm
并产生一个ConcreteExecutor
我需要的算法的特定实现。所以这Executor
是一种对其组件之一进行参数化的模块。
我对吗?这是获得我需要的最佳方式吗?我想知道这样的想法,因为我来自 Java/C++ 背景,所以我习惯于使用接口和抽象类,我需要以正确的方式解决这个函子/模块抽象问题。
获得我想要的东西的正确语法是什么?
提前致谢