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#的人。