2010-07-29 14 views
5

Ich versuche, eine polymorphe Funktion zu schreiben, die je nach Art des Parameters etwas anders machen muss. Gibt es eine Möglichkeit, eine Musterübereinstimmung mit dem Typ des Objekts unter Verwendung der eingebauten Typen zu machen? Ich denke an etwas in dieser Richtung:OCaml Mustervergleich auf Builttin-Typen

let to_string v = 
    match v with 
    | string -> v 
    | int -> string_of_int v 
    | _ -> "" 

, aber dies scheint nicht ein gültiges OCaml-Programm.

Ich habe this question gesehen, aber das beantwortet meine Frage auch nicht ganz. Ich würde lieber verwenden, um den Standard, eingebaute Typen zu verwenden, anstatt neue Typen dafür zu konstruieren (obwohl ich das tun kann, wenn das der einzige Weg ist).

Antwort

3

Eigentlich gilt diese Antwort vollständig für Sie. Sie können nur eine Typklasse abgleichen, und der durch die Union definierte Typ int, string, float, ... existiert nicht und muss erstellt werden (wie in der vorherigen Antwort). 'a arbeitet an einem bestimmten Typ, stellt jedoch keine Vereinigung aller Typen dar.

könnten Sie in der Lage sein zu tun, was Sie wollen eine externe C-Funktion (18.3) verwendet wird, obwohl auf dem atomaren Tags Abschnitt Blick, ich bin nicht sicher, ob Sie in der Lage sein char und int zu unterscheiden.

+0

:(- das ist, wovor ich Angst hatte. Na ja, ich schätze mein Programm wird nicht ganz so schön aussehen. –

+0

Warum versuchst du so etwas zu tun? Es gibt wahrscheinlich einen besseren Weg. – nlucaroni

+0

Ich dachte das Ich wäre in der Lage, eine polymorphe Funktion auf diese Weise zu schreiben, mit Überschreibungen für die verschiedenen Typen, die ich brauche, aber denke darüber nach, werde wahrscheinlich wahrscheinlich trotzdem Varianten verwenden müssen, da ich am Ende auch einen Lexing-Schritt machen werde. –