2
R中的“修改时复制”语义到底是什么?规范来源在哪里?
偶尔我会遇到R具有修改时复制语义的概念,例如在Hadley的devtools Wiki中。 大多数R对象具有“修改时复制”语义,因此修改函数参数不会更改原始值 我可以将此术语追溯到R-Help邮件列表。例如,Peter Dalgaard在2003年7月写道: R是一种函数式语言,具有惰性评估和弱动态类型(变量可以随意更改类型:a <-1;允许a <-“ a”)。从语义上讲,尽管在实现过程中使用了一些优化技巧来避免最差的效率,但是一切都是按修改进行复制的。 同样,Peter Dalgaard在2004年1月写道: R具有修改时复制的语义(原则上有时在实践中),因此一旦对象的一部分发生更改,您可能必须在新的位置查找包含它的任何内容,包括对象本身。 再往前走,Ross Ihaka在2000年2月说: 我们投入了大量工作来实现这一目标。我将语义描述为“修改时复制(如有必要)”。仅在修改对象后才进行复制。(如有必要)部分意味着,如果我们可以证明修改不能更改任何非局部变量,那么我们就可以继续进行修改而无需复制。 它不在手册中 不管我多么努力,我都无法在R手册(R语言定义或R Internals)中找到“修改时复制”的参考。 题 我的问题分为两部分: 正式记录在哪里? 修改时复制如何工作? 例如,既然将诺言传递给函数,那么谈论“通过引用传递”是否合适?