In dem Buch 'Anwendungen mit OCaml entwickeln' gibt es die folgende Erklärung bezüglich der Rückgabewerte:
Da der Wert vor einem Semikolon verworfen wird, gibt Objective CAML eine Warnung aus, wenn sie nicht vom Typ unit ist.
%Vor%
Ich verstehe nicht, warum es ein Problem wäre, dass 2
einen anderen Rückgabewert als unit
hat, weil ich nicht 2
zurückgeben, sondern 3
zurückgeben möchte. So wie ich es verstehe, ist jede Anweisung vor meiner allerletzten Anweisung nicht der Rückgabewert der Funktion, also warum die Warnung?
Ich habe diese Warnung überall in meinem Code erhalten und es wird mir klar, dass ich nicht wirklich verstehe, wie die Rückgabewerte in OCaml wirklich funktionieren.
Danke für Ihre Hilfe.
Betrachte den Ausdruck e1 ; e2
. Definitionsgemäß bedeutet die Auswertung dieses ganzen Ausdrucks die Auswertung von e1
und dann e2
und der resultierende Wert des gesamten Ausdrucks ist der Wert von e2
. Das Wertergebnis von e1
wird verworfen. Dies ist nicht das Problem, wenn der Typ von e1
unit
ist, weil er den einzigen einzelnen Einwohnerwert ()
hat. Für alle anderen Typen bedeutet das Verwerfen des Ergebnisses von e1
das Verlieren von Informationen, was wahrscheinlich nicht das ist, was der Programmierer beabsichtigt hat, daher die Warnung. Der Programmierer muss den Ergebniswert explizit ignorieren, entweder mit ignore
oder mit
Typ-Annotation kann weggelassen werden, aber es kann nützlich sein, sicherzustellen, dass e1
vollständig auf den erwarteten Typ evaluiert wird (keine Teilapplikation).
Nun, die Warnung ist da, weil die Tatsache, dass du einen Wert produzierst, ihn dann aber nicht benutzt (und sehr oft ist) ein Anzeichen dafür ist, dass du etwas falsch machst. Wenn Sie dieser Richtlinie nicht zustimmen, können Sie diese Warnung deaktivieren. Aber wie immer ist es eine gute Übung, dies nicht zu tun. In diesem Fall können Sie, wenn Sie wirklich keinen Wert eines Ausdrucks benötigen, ihn ignorieren oder an _
binden, wie in let _ = f() in ...
.
Tags und Links ocaml return-value