unveränderlich in F #

8

Ich weiß, dass Variablen in F # standardmäßig unveränderlich sind. Aber zum Beispiel in F # interactive:

%Vor%

Also weise ich 4 x zu, dann 5 x und es ändert sich. Ist es richtig? Sollte es einen Fehler oder eine Warnung geben? Oder ich verstehe einfach nicht, wie es funktioniert?

    
Alexan 22.06.2012, 13:42
quelle

4 Antworten

14

Wenn Sie let x = 3 schreiben, binden Sie den Bezeichner x an den Wert 3 . Wenn Sie dies ein zweites Mal im selben Bereich tun, deklarieren Sie eine neue ID, die die vorherige versteckt, da sie den gleichen Namen hat.

Das Mutieren eines Wertes in F # erfolgt über den destruktiven Update-Operator <- . Dies schlägt bei unveränderbaren Werten fehl, d. H .:

%Vor%

Um eine änderbare Variable zu deklarieren, fügen Sie mutable nach let :

hinzu %Vor%

Aber was ist der Unterschied zwischen den beiden, könnten Sie fragen? Ein Beispiel kann genug sein:

%Vor%

Trotz der Erscheinungen ist dies eine Endlosschleife. Die in der Schleife deklarierte i ist eine andere i , die die äußere versteckt. Der äußere ist unveränderlich, behält also immer den Wert 0 und die Schleife endet nie. Der richtige Weg dies zu schreiben ist mit einer veränderbaren Variable:

%Vor%     
Asik 22.06.2012, 13:54
quelle
5

x wird nicht geändert, es ist nur durch die nächste Deklaration verborgen. Zum Beispiel:

%Vor%     
qehgt 22.06.2012 13:47
quelle
4

Sie ordnen 5% x nicht zu, Sie definieren eine neue Variable.

Das folgende Beispiel zeigt, dass es zwei verschiedene Variablen gibt. (Es zeigt auch, dass Sie auf das alte x "zugreifen" können, wenn es sich in einer Schließung befindet, die von einer anderen Funktion verwendet wird):

%Vor%

ergibt

%Vor%

Wie Sie sehen, verwenden beide Aufrufe von f die erste Variable x . Die Definition let x = 0;; definiert eine neue Variable x , definiert aber f nicht neu.

    
jrouquie 22.06.2012 14:13
quelle
3

Hier ist ein minimales Beispiel, das den Bezeichner "Shadowing" (d. h. Verbergen) in F # veranschaulicht:

%Vor%

Ihr Beispiel ist etwas komplizierter, weil Sie in F # Interactive (FSI) arbeiten. FSI gibt dynamisch Code aus, der in Ihrem Beispiel ungefähr wie folgt aussieht:

%Vor%     
Stephen Swensen 22.06.2012 15:30
quelle

Tags und Links