ist es möglich, einzeln zu erstellen, wenn (ohne sonst)? Es ist sehr nützlich, einen zu verwenden, wennOCaml ist es möglich, einzelne zu erstellen, wenn (ohne sonst)
Antwort
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).
Das Tag 'if-statement' ist für Ocaml ungeeignet. Ocaml hat keine Aussagen, nur * Ausdrücke *! –