wye*_*r33 8 .net f# functional-programming
F#中不可变记录的复制和更新过程是共享还是复制内存?含义,在以下代码中
type MyRecord = {
X: int;
Y: int;
Z: int
}
let myRecord1 = { X = 1; Y = 2; Z = 3; }
let myRecord2 = { myRecord1 with Y = 100; Z = 2 }
Run Code Online (Sandbox Code Playgroud)
为变量做myRecord1和myRecord2共享内存X?更一般地说,是否有一个很好的引用,它准确表示F#中哪些不可变/持久数据结构主动共享内存?
Fyo*_*kin 10
在这种情况下,X将复制变量的内存.代码的最后一行实际上只是另一种写法:
let myRecord2 = { X = myRecord1.X; Y = 100; Z = 2 }
Run Code Online (Sandbox Code Playgroud)
现在,如果X是引用类型,则可以复制用于引用它的内存,但是其内容的内存将被共享.
例如,考虑一下:
type MyX = { W: int; U: int }
type MyRecord = {
X: MyX;
Y: int;
Z: int
}
let myRecord1 = { X = { W = 5; U = 6 }; Y = 2; Z = 3; }
let myRecord2 = { myRecord1 with Y = 100; Z = 2 }
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,存储器X会被复制,但记忆W和U 将被共享.