2016-04-06 15 views
1

ich eine Art Datensatz extrahieren:Wie Informationen aus einem Datensatz in OCaml

type record = { first : string; second : string list; third : string } 

Ich mag Daten daraus extrahieren Spiel mit ... Wie würde ich das tun ..

Bitte? Gib mir Bescheid. Vielen Dank!

+6

Mögliches Duplikat von [Datensatztyp Mustererkennung in Ocaml] (http://stackoverflow.com/questions/17173690/record-type-pattern-matching-in-ocaml) –

Antwort

6

können Sie den gesamten Datensatz entsprechen:

match my_record with 
| { first = "something"; } -> do_something 
| { second = hd :: tl; third = "something else"; } -> do_something_else 
(* ... *) 

oder zielen auf spezielle Felder in es mit der Punktnotation:

match my_record.second with 
| hd :: tl -> do_something 
(* ... *) 

Es ist auch möglich, einen Datensatz in einer Funktion mit einer syntaktischen destrukturiert Verknüpfung mit dem Namen Feld punning:

let fun_example { first; third; _ } = 
    "This is first: "^first^" and this is third: "^third 

oder durch Aliasnamen für die Felder bereitstellt:

let fun_example_2 { first = f; third = t; _ } = 
    "This is first: "^f^" and this is third: "^t 

Der Unter ; _ in dem Muster verwendet, um den Compiler zu sagen, es nicht über unvollständige Übereinstimmungen, wenn die #warnings "+9" Direktive in der Toplevel eingeschaltet sorgen sollte. Es kann abhängig von Ihrem Stil weggelassen werden.

Für weitere Details siehe RWO, dort ist a great chapter on records!

Verwandte Themen