陰影是,當你創建一個新結合使用相同的名稱作爲一個以前的綁定。這「隱藏」原始名稱,隱藏它,但不會更改或替換它。在FSI試試這個看:
let foo = 42
let printFoo() =
printfn "%i" foo
printFoo() ;;
這將打印:
42
val foo : int = 42
val printFoo : unit -> unit
val it : unit =()
然後加:
// ... more code
let foo = 24
printfn "%i" foo // prints 24
printFoo();;
這將打印:
24
42
val foo : int = 24
val it : unit =()
注意,它仍然當您致電printFoo()
時打印42 - 該功能看到原始(未遮蓋)的裝訂,但新的打印顯示新值。
使用<-
變異值,需要一個可變綁定:
let mutable bar = 42
let printBar() =
printfn "%i" bar
printBar();;
此,像上面,打印42.請注意,您與可變關鍵字這裏覆蓋默認不可改變的行爲。
你那麼內的可變綁定更改值:
bar <- 24
printfn "%i" bar
printBar();;
這將打印24兩次,因爲與陰影版本,突變改變了原來的綁定。如果您在原始綁定中關閉mutable
,則在使用<-
時會出現錯誤。