F# 可变变量';x';以无效的方式使用。闭包无法捕获可变变量

F# 可变变量';x';以无效的方式使用。闭包无法捕获可变变量,f#,F#,我有几本书要看,但当我在研究我的F#问题时,我发现这里的语法有一些困难。如果有人认为我不应该在这里问这些问题,并且有关于预算的另一本书推荐书,请让我知道 下面的代码再现了我在项目中遇到的问题 [<EntryPoint>] let main argv = let mutable x = 0 let somefuncthattakesfunc v = ignore let c() = let y = x ignore

我有几本书要看,但当我在研究我的F#问题时,我发现这里的语法有一些困难。如果有人认为我不应该在这里问这些问题,并且有关于预算的另一本书推荐书,请让我知道

下面的代码再现了我在项目中遇到的问题

[<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
——分配是
我错误地放置=而不是我错误地放置=而不是