Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struct 变异F[]记录_Struct_F#_Record - Fatal编程技术网

Struct 变异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 基本问题是,只有结构本身是可变的,才能修改

这段代码展示了如何使函数改变其输入-这是我们来到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

基本问题是,只有结构本身是可变的,才能修改可变字段。正如您所指出的,我们需要在年龄声明中使用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