2013-10-12 14 views

Antwort

8

Lesen Sie die control structures : conditional Abschnitt §6.7.2 des Ocaml Handbuchs.

Es ist nur möglich, die else zu vermeiden, wenn der then Teil (daher der gesamte if Ausdruck) von unit Typ ist. Zum Beispiel

let x = 3 in 
    (if x > 0 then Printf.printf "x is %d\n" x); 
    x + 5 
;; 

x is 3 gedruckt werden soll, und das Rück als Wert 8.

Die allgemeine Regel ist, dass if κ then τ zu if κ then τ else() entspricht daher der „dann Teil“ τ hat von unit Typ sein und die „else Teil "ist standardmäßig (), so dass die gesamte if von unit Typ ist.

let x = 3 in (if x > 0 then "abc"); x + 7 (*faulty example*) 

nicht einmal da "abc" kompilieren ist nicht von unit Typ (wie () ist)

Sie könnten manchmal die ignore Funktion (von Pervasives) auf dem then Teil, um es vonzu zwingenTyp (aber das ist nur sinnvoll, wenn es signifikanteside-effects; Wenn Sie "abc" durch ignore "abc" ersetzen, würde mein fehlerhaftes Beispiel kompilieren, aber bleibt nutzlos).

jedoch nicht vergessen, dass Ocaml nur Ausdrücke (aber keine Aussagen überhaupt). Nebeneffekte sind in der Regel unit Typ (aber Sie könnten, aber das ist in der Regel verpönt, definieren Sie eine Funktion, die nicht unit Ergebnis und hat einen nützlichen Nebeneffekt).