2016-07-10 35 views
0

我想在F#中創建一個使用可變變量返回值的標籤。不幸的是F#將這個標籤設置爲一個常量值。如果mutable的值發生變化,則標籤的值將保留。這有點不一致嗎?有沒有辦法讓標籤(「a」)依賴於mutable(「x」)?如何將標籤鏈接到F#中的可變變量?

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

如果你正在學習F#,爲什麼你使用'可變'。從我的觀點來看,通過繼承程序和麪向對象語言的思想來學習函數式編程是一個壞主意。 –

+0

我不想自己變異。我想'a'是一個返回x + 2的函數 – checkThisOut

+2

@checkThisOut所以使它成爲函數 – Sehnsucht

回答

5

從你自己的評論,你想a成爲函數返回X + 2
的是直接的翻譯是:

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 
*)