Struct 变异F[]记录
这段代码展示了如何使函数改变其输入-这是我们来到F时要避免的事情之一Struct 变异F[]记录,struct,f#,record,Struct,F#,Record,这段代码展示了如何使函数改变其输入-这是我们来到F时要避免的事情之一 type Age = { mutable n : int } let printInside a = printfn "Inside = %d" a.n let inside a = a.n <- a.n + 1 a.n let a = {n = 1} printInside a //a = 1 inside a printInside a //a = 2 基本问题是,只有结构本身是可变的,才能修改
type Age = { mutable n : int }
let printInside a = printfn "Inside = %d" a.n
let inside a =
a.n <- a.n + 1
a.n
let a = {n = 1}
printInside a //a = 1
inside a
printInside a //a = 2
基本问题是,只有结构本身是可变的,才能修改可变字段。正如您所指出的,我们需要在年龄声明中使用byref。我们还需要确保a是可变的,最后我们需要在调用内部函数时使用&运算符。&是使用byref参数调用函数的方法
type [<Struct>] Age = { mutable n : int }
let printInside a = printfn "Inside = %d" a.n
let inside (a : Age byref) =
a.n <- a.n + 1
a.n
let mutable a = {n = 1}
printInside a //a = 1
inside &a
printInside a //a = 2
现在我了解了模式,下面是一个简单的示例,只是一个int而不是一个struct记录,说明了如何改变传递到函数中的值:
let mutable a = 1
let mutate (a : byref<_>) = a <- a + 1
mutate &a
a //a = 2
let mutable a = 1
let mutate (a : byref<_>) = a <- a + 1
mutate &a
a //a = 2