Function F#函数不';不要让我改变可变值

Function F#函数不';不要让我改变可变值,function,variables,f#,mutable,mutation,Function,Variables,F#,Mutable,Mutation,可能是另一个愚蠢的初学者问题。。。但它仍然困扰着我 我似乎在网上找不到任何答案。。。可能是因为我查错了词但是 无论如何,我的代码如下所示: let counter() = let mutable x = 0 let increment(y :int) = x <- x + y // this line is giving me trouble printfn "%A" x // and this one too incremen

可能是另一个愚蠢的初学者问题。。。但它仍然困扰着我

我似乎在网上找不到任何答案。。。可能是因为我查错了词但是

无论如何,我的代码如下所示:

let counter() = 
    let mutable x = 0

    let increment(y :int) =
        x <- x + y // this line is giving me trouble
        printfn "%A" x // and this one too

    increment // return the function
let counter()=
设可变x=0
let增量(y:int)=

x如错误消息所示,您可以使用
ref
单元格:

let counter() = 
    let x = ref 0

    let increment(y :int) =
        x := !x + y // this line is giving me trouble
        printfn "%A" !x // and this one too

    increment // return the function

这正是您的代码在合法的情况下所做的。
运算符从ref单元格中获取值,并
:=
分配一个新值。至于为什么需要这样做,这是因为通过闭包捕获可变值的语义被证明是令人困惑的;使用
ref
单元格可以使事情更明确,更不容易出错(请参阅以获取进一步的详细信息)。

这会起什么作用?请详细解释一下,我在这方面是个十足的傻瓜language@ElectricCoffee-我补充了进一步的解释。我已经验证了我的代码是否正常工作,所以我很惊讶你在这方面遇到了问题-你确定你已经删除了旧代码吗?结果我删除了一会儿,在将你的更改应用到我的代码后忘记删除
mutable
。。。现在可以用了,谢谢@我现在读的是现实世界中的函数式编程,我现在读的这一章正好涵盖了这个主题。这本书非常适合那些有C#经验、正在学习F#的人。