F# 可变变量';x';以无效的方式使用。闭包无法捕获可变变量
我有几本书要看,但当我在研究我的F#问题时,我发现这里的语法有一些困难。如果有人认为我不应该在这里问这些问题,并且有关于预算的另一本书推荐书,请让我知道 下面的代码再现了我在项目中遇到的问题F# 可变变量';x';以无效的方式使用。闭包无法捕获可变变量,f#,F#,我有几本书要看,但当我在研究我的F#问题时,我发现这里的语法有一些困难。如果有人认为我不应该在这里问这些问题,并且有关于预算的另一本书推荐书,请让我知道 下面的代码再现了我在项目中遇到的问题 [<EntryPoint>] let main argv = let mutable x = 0 let somefuncthattakesfunc v = ignore let c() = let y = x ignore
[<EntryPoint>]
let main argv =
let mutable x = 0
let somefuncthattakesfunc v = ignore
let c() =
let y = x
ignore
somefuncthattakesfunc (fun () -> (x <- 1))
Console.ReadKey()
0 // return an integer exit code
有什么线索吗?正如错误消息所说,闭包无法捕获可变变量,请改用引用单元格:
let main argv =
let x = ref 0
let somefuncthattakesfunc v = ignore
let c() =
let y = !x
ignore
somefuncthattakesfunc (fun () -> x := 1)
Console.ReadKey()
0 // return an integer exit code
另请参见。如错误消息所述,闭包无法捕获可变变量,请改用引用单元格:
let main argv =
let x = ref 0
let somefuncthattakesfunc v = ignore
let c() =
let y = !x
ignore
somefuncthattakesfunc (fun () -> x := 1)
Console.ReadKey()
0 // return an integer exit code
另请参见。如错误所述,您无法关闭可变变量,您正在执行以下操作:
let y = x
及
如果需要变异,建议使用ref
:
let x = ref 0
let somefuncthattakesfunc v = ignore
let c() =
let y = !x
ignore
somefuncthattakesfunc (fun () -> x := 1)
正如错误所解释的,您不能关闭可变变量,您正在执行以下操作:
let y = x
及
如果需要变异,建议使用ref
:
let x = ref 0
let somefuncthattakesfunc v = ignore
let c() =
let y = !x
ignore
somefuncthattakesfunc (fun () -> x := 1)
使用
ref
而不是mutable
,但是你从来没有分配给x
,那么为什么它是mutable
?@ildjarn我在lambda表达式中分配给x不,你是在比较x
——分配是使用ref
而不是mutable
,但是你从来没有分配给x
,那么为什么它是可变的呢?@ildjarn我在lambda表达式中分配给x不,你是在比较x
——分配是我错误地放置=而不是我错误地放置=而不是