Also jetzt habe ich zwei Klassen der gleichen Klasse Typ, z.Kann ich von einer zur Laufzeit ausgewählten OCaml-Klasse erben?
class foo : foo_type = object ... end
class bar : foo_type = object ... end
Ich möchte eine dritte Klasse haben, die entweder von foo
oder bar
zur Laufzeit übernimmt. Z.B. (Pseudo-Syntax)
class baz (some_parent_class : foo_type) = object
inherit some_parent_class
...
end
Ist das in OCaml möglich?
Anwendungsfall: Ich verwende Objekte zum Erstellen von AST-Besuchern, und ich möchte diese Besucher basierend auf einer Reihe von Laufzeitkriterien kombinieren können, so dass sie nur einen kombinierten Durchlauf über den AST ausführen.
Edit: Ich glaube, ich habe einen Weg gefunden, um die gewünschte Klasse mit First-Class-Module zu erstellen:
class type visitor_type = object end
module type VMod = sig
class visitor : visitor_type
end
let mk_visitor m =
let module M = (val m : VMod) in
(module struct
class visitor = object
inherit M.visitor
end
end : VMod)
Allerdings scheint es ein wenig Kreisverkehr eine Klasse in einem Modul zu haben, um zu wickeln mach es "erstklassig". Wenn es einen einfacheren Weg gibt, lass es mich wissen.
Sie erleichtern diese ein wenig mit 'lassen mk_visitor (Modul M: VMod) = ... 'anstelle des' Let-Moduls'. – gsg
Ja, ich werde das tun, wenn die Codebase an Upgrades auf OCaml 4 arbeitet. Momentan unterstützen wir noch 3.12. – int3