2010-07-29 19 views
5

Sto provando a scrivere una funzione polimorfica, che deve fare qualcosa di leggermente diverso a seconda del tipo di parametro. C'è un modo per eseguire un pattern match sul tipo dell'oggetto, usando i tipi built-in? Sto pensando a qualcosa in questo modo:Corrispondenza dei pattern OCaml sui tipi di unità incorporate

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

ma questo non sembra essere un programma OCaml valido.

Ho visto this question, ma questo non risponde alla mia domanda. Vorrei preferire per utilizzare i tipi standard incorporati anziché costruire nuovi tipi per questo (anche se posso farlo se questo è l'unico modo).

risposta

3

In realtà questa risposta si applica completamente a voi. È possibile abbinare solo una classe di tipi e il tipo definito dall'unione di int, string, float, ... non esiste e deve essere creato (come nella risposta precedente). 'a funziona su un tipo particolare, ma non rappresenta un'unione di tutti i tipi.

si potrebbe essere in grado di fare ciò che si vuole utilizzare una funzione C esterna (18.3), anche se, guardando la sezione tag atomica, non sono sicuro che sarete in grado di differenziare char e int.

+0

:(- questo è quello che temevo Oh beh, immagino che il mio programma non sia proprio così bello –

+0

Perché stai provando a fare qualcosa di simile? Probabilmente c'è un modo migliore. – nlucaroni

+0

Ho pensato che Sarei in grado di scrivere una funzione polimorfica in questo modo, con sostituzioni per i diversi tipi di cui ho bisogno, ma pensandoci sopra, probabilmente dovrò usare comunque le varianti, poiché finirò per fare anche un passo di lexing. –

Problemi correlati