eine weitere noob Frage in Bezug auf F #.
Wenn ich den folgenden Code habe ...
%Vor%Die Ausgabe ist wie folgt ...
%Vor%Was hier ungewöhnlich erscheint, ist die Reihenfolge, in der der Code ausgeführt wird. In einer früheren Frage erwähnte Brian etwas über Ausdrücke, ich hoffte, dass jemand das etwas mehr erklären könnte. Es sieht fast so aus, als würde der Compiler Dinge intelligent berechnen, um Werte zu berechnen ... aber ich weiß es nicht?
ExeA
und ExeC
sind keine Funktionen, sondern einzelne Werte. Der Compiler stellt sicher, dass die Werte in der Reihenfolge initialisiert werden, in der sie in der Quelldatei deklariert sind. Daher geschieht Folgendes:
ExeC
initialisiert ExeA
initialisiert Example 1
wird mit dem initialisierten Wert ExeA
ExeB
wird als normal Example 3
wird mit dem initialisierten Wert ExeC
Wenn Sie möchten, dass ExeA
und ExeC
wirklich faul sind - das heißt, wenn ihre Nebeneffekte laufen - können Sie sie in Funktionen verwandeln, die unit
akzeptieren:
Als Nachfolge von Tims Antwort dachte ich, Sie würden vielleicht einen weiteren Einblick in das bekommen, worüber Sie gestolpert sind. In Ihrem Beispiel nutzen ExeC und ExeA den funktionalen Stil des Organisierens von Code durch lexikalisches Scoping und Closures. Lassen Sie mich ein leistungsfähigeres Beispiel zeigen.
%Vor% Auch hier ist timesPieDiv4
keine Funktion, hat aber einen Rumpf, der eine Reihe von Unterberechnungen enthält, die nicht dem Rest der calc
-Funktion ausgesetzt sind. In einer Sprache wie C # haben Sie zwei Möglichkeiten, die beide mich nicht ansprechen. Die erste Option besteht darin, einfach pie
und pieDiv4
innerhalb des Hauptteils von calc
zu deklarieren, aber dann ist es weniger klar, wie sie verwendet werden und Sie Ihren Variablenraum verschmutzen. Die andere Möglichkeit besteht darin, diese Unterberechnungen in eine separate private Hilfsfunktion zu faktorieren. Aber ich mag solche Funktionen nicht, weil es für viele schwierig ist, Ihre komplexen Algorithmen zu analysieren, da Sie ständig nach verschiedenen Implementierungselementen suchen. Plus es ist eine Menge Kesselplatte Code und Wertübergabe. Aus diesem Grund sind F # -Funktionen standardmäßig "public", lexikalische Scoping- und Closure-Funktionen erlauben es Ihnen, "private" Funktionen und Werte in Ihren Public-Facing-Funktionen hierarchisch zu organisieren.
Tags und Links f#