f#中的赋值运算符

sat*_*ish 4 f# shadowing

我在ruby以及powershell编程中看到我们可以分配变量,如a,b = b,a.它实际上交换了变量.

如果这样可以在f#中使用,请引导我参考一下

Ste*_*sen 13

通常,F#不允许变量重新分配.相反,它通过let绑定来支持不可变的命名值.因此,以下是不可能的:

let a = 3
a = 4
Run Code Online (Sandbox Code Playgroud)

除非您明确标记amutable:

let mutable a = 3
a <- 4
Run Code Online (Sandbox Code Playgroud)

但是,F#确实允许在大多数情况下变量"阴影".对此的唯一限制是它不能在顶级模块上完成.但是,在函数中,例如,以下工作正常:

let f () =
    let a,b = 1,2
    let a,b = b,a //"swap"
    a,b
Run Code Online (Sandbox Code Playgroud)

  • 相反,我总是喜欢阴影而不是突变.阴影具有与不可变数据结构相同的优点:数据的不同"版本"在某个范围内被冻结.例如,当在闭包中考虑捕获时,阴影变量更容易推理(事实上,F#不允许在闭包中捕获可变变量,但它确实允许捕获`ref`类型的不可变变量,这具有相同的效果). (2认同)