编译器如何处理扩展记录

Pau*_*icz 3 f#

当扩展记录时,编译器是否在内存中创建了一个新位置(深层复制?),或者编译器是否使记录可变并修改了值?

例如:

type MyRecord = { A : string
                ; B : string
                }

let record = { A = "A"; B = "B" }

let record = { record with A = "new A" } //copy or overwrite? 
Run Code Online (Sandbox Code Playgroud)

因为我覆盖record了编译器复制还是覆盖?是否存在性能问题?

des*_*sco 6

它制作副本.

复制并更新记录表达式

*复制和更新记录表达式详细说明它是如下所示的记录表达式:

让{= label1 = expr1中的v = expr; ......; field-labeln = exprn; F1 = v.F1; ......; FM = v.FM}

其中F1 ... FM是R的字段,未在字段初始化程序中定义,v是新变量.*