Я разрабатываю некоторые алгоритмы в OCaml, которые нуждаются в том, чтобы некоторые части были «подключаемыми», чтобы часть вычислений оставалась для конкретных вычислителей.one:
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 ++, поэтому я привык использовать интерфейсы и абстрактные классы, и мне нужно правильно разобраться с этой проблемой абстракции функтора / модуля.
Какой правильный синтаксис для получения того, что я хочу?
Заранее спасибо