Ich entwickle einige OCaml-Algorithmen, die einige Teile als "steckbar" benötigen, so dass ein Teil der Berechnung bestimmten Berechnern überlassen wird.Verwenden von Funktoren als Schnittstellen in OCaml
Nur um ein Beispiel zu machen nehme ich eine Signatur wie diese haben:
module type Algorithm = sig
val feed : float -> unit
val nth : int -> (float -> float)
end
und zwei verschiedene Implementierungen, die Alg1
und Alg2
sein wird. Dieses Algorithm
Modul sollte die Schnittstelle für verschiedene Implementierungen wie diese beiden darstellen.
Jetzt brauche ich eine andere Komponente, machen wir es Executor
nennen, dass das Modul sein, das Alg1
oder Alg2
Throught ihre Schnittstelle verwendet ..
Lesung über functors es scheint, dass ich einen Funktor brauchen sollte, die eine Algorithm
nimmt und eine ConcreteExecutor
mit einer spezifischen Implementierung des Algorithmus ich brauche. So dass Executor
ist eine Art von Modul, das über eine seiner Komponenten parametriert ist.
Bin ich richtig? Ist es der beste Weg, um das zu bekommen, was ich brauche? Ich frage mich, ob Thinkgs wie diese sind, weil ich aus einem Java/C++ - Hintergrund komme, also bin ich gewohnt, Interfaces und abstrakte Klassen zu verwenden, und ich muss in dieser Funktor/Modul-Abstraktionsproblem in der richtigen Weise gehen.
Welche ist die richtige Syntax, um zu erhalten, was ich will?
Vielen Dank im Voraus
Dies ist wirklich ein großer Einsatz von Funktoren. Ich benutze sie in einer Labyrinthgenerierungsanwendung. Schließen Sie einen Algorithmus und eine Labyrinthdarstellung an, und Sie sind aus. Arbeitet noch an der Ausgabe, die ein anderer Funktor sein könnte, um SVG, GraphViz, PDF und PNG zu unterstützen. – nlucaroni
@nlucaroni - ist der Code zu deiner Labyrinthgenerierung überall verfügbar? – aneccodeal