阴影是,当你创建一个新结合使用相同的名称作为一个以前的绑定。这“隐藏”原始名称,隐藏它,但不会更改或替换它。在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
,则在使用<-
时会出现错误。