Ist es möglich, Druckanweisungen zum Debuggen / Testen in Codeblöcke zu setzen? Zum Beispiel können Sie in Java System.out.println("")
in der Mitte von Methoden verwenden, um Variablen oder andere Dinge zu überprüfen, aber in OCaml würde ein Befehl wie print_string
funktionieren? Würde es nicht einen Wert vom Typ Einheit zurückgeben und damit einen Fehler verursachen, anstatt Ihnen zu erlauben, es zu drucken?
Es wird Ihnen gut gehen, wenn Sie den Ausdruck in einen Ausdruck einbetten Reihenfolge .
AKTUALISIEREN
Hier ist ein konkretes Beispiel, weil die obige Antwort ziemlich kurz war und, nun, Antworten mit Links sind nur keine guten Antworten. Es ist die klassische tail-rekursive Formulierung faktoriell (ja, langweilig, aber vertraut):
%Vor%Hier sehen Sie die Nebeneffekte des Drucks, aber das Ergebnis war immer noch wie erwartet 120.
Da OCaml keine reine funktionale Sprache ist, gibt es viele Möglichkeiten, dies zu tun. Hier ist die Art, wie ich diese Art von Code schreibe, nur für ein konkretes Beispiel.
%Vor%Nachdem es funktioniert, können Sie das Zeug in den Kommentaren (* DEBUG *) entfernen.
Beachten Sie die Verwendung von%! um den Puffer zu spülen. Wenn Sie mit printf
viel Debugging durchführen (so wie ich), ist es sehr hilfreich, dies zu erfahren.
Hier ist ein einfaches Beispiel, das zeigt, dass Expression-Sequenzen wie in Ray Toals Antwort nicht erwähnt werden. Ich brauche unbedingt Klammern um sie herum:
%Vor% Eine weitere Möglichkeit, den Rückgabewert einer Funktion zu verwerfen, ist die Verwendung von ignore
: