2016-07-10 25 views
0

Ich möchte eine Bezeichnung in F # erstellen, die eine veränderbare Variable verwendet, um einen Wert zurückzugeben. Leider setzt F # dieses Label auf einen konstanten Wert. Ändert sich der Wert des Mutable, bleibt der Wert des Labels erhalten. Ist es nicht ein bisschen inkonsequent? Gibt es eine Möglichkeit, die Kennzeichnung ("a") von der veränderbaren ("x") abhängig zu machen?Wie kann ich ein Label mit einer veränderbaren Variable in F # verknüpfen?

let mutable x = 0; 

let a = x + 2; // I want not to set a to a constant value 
let b two = x + two; 

x <- 1; 

let c = b 2; 

let isConsistent = a = c; 


val mutable x : int = 1 
val a : int = 2 
val b : two:int -> int 
val c : int = 3 
val isConsistent : bool = false 
+2

Wenn Sie F # lernen, warum Sie verwenden 'wandelbar '. Functional Programming zu lernen, indem ich die Ideen von prozeduralen und objektorientierten Sprachen aus meiner Sichtweise übertrage, ist eine schlechte Idee. –

+0

Ich möchte nicht auf eigene Faust mutieren. Ich will 'a' eine Funktion sein, die x + 2 – checkThisOut

+2

@checkThisOut zurückgibt so machen Sie es zu einer Funktion – Sehnsucht

Antwort

5

Von Ihrem eigenen Kommentar möchten Sie a eine Funktion sein Rückkehr x + 2
Direkte Übersetzung davon ist:

let mutable x = 0 

let a() = x + 2 
let b two = x + two 

x <- 1 

let c = b 2 

let isConsistent = a() = c // don't forget to call the function 'a' 

(* 
val mutable x : int = 1 
val a : unit -> int 
val b : two:int -> int 
val c : int = 3 
val isConsistent : bool = true 
*)