OCaml: Die Typüberprüfung Von Objekten
Wenn ich ein Objekt haben, wie kann ich bestimmen seine Art? (Gibt es eine OCaml-äquivalent zu Java ist instanceof
Betreiber?)
- könnte Sie post code, denn normalerweise kennen Sie den Objekttyp wenn Sie die Verarbeitung
Du musst angemeldet sein, um einen Kommentar abzugeben.
OCaml hat strukturelle Typisierung von Objekten vielmehr als Nominativ Typisierung wie in Java. Also das der Typ ein Objekt ist im wesentlichen festgelegt (und nur bedingt) durch seine Methoden. Objekte in OCaml können erstellt werden, die direkt, ohne den Umweg über so etwas wie eine Klasse.
Können Sie Funktionen schreiben, die verlangen, dass Ihre argument-Objekte haben bestimmte Methoden (und, dass diese Methoden haben bestimmte Arten); zum Beispiel die folgende Methode nimmt ein argument, das ist jedes Objekt mit einer Methode "bar":
Gibt es eine Diskussion von "Matching Von Objekten Mit Mustern" auf Lambda, die Ultimative (das Papier verwendet Scala als Sprache, so wird deine Frage nicht beantworten). Eine weitere relevante Ocaml-mailing-Liste thread bedeutet, dass es keine RTTI/safe-downcasting für Objekte.
Algebraischer (nicht Objekt -) Typen, die Sie offensichtlich haben:
genannt (Muster -) passende
Jemand schrieb eine Erweiterung, die erlaubt, dass up/down-casting-Ocaml-Objekte.
Kurz, Sie codieren Ihre eigenen RTTI-Mechanismus. OCaml bietet keine RTTI-oder up/down-casting (die letzteren zum Teil, weil die Vererbung und subtypisierung sind orthogonal in OCaml eher als einheitlich wie in Java).
Könnten Sie tun, etwas mit Streichern oder polymorphen Varianten zu Kodieren, geben Sie Informationen in Ihre Klassen und Objekten. Ich glaube, dass LablGTK einige dieser macht, und bietet eine utility-Bibliothek zur Unterstützung von Objekt-tagging und up/down-casting.
Etwas out-of-topic, aber OPA-Sprache (das lenkt stark von der einige Aspekte der OCaml), lässt sich das äquivalent von pattern-matching auf Objekte. Es ist also durchaus machbar.