最佳答案
每隔一段时间,我都会遇到 R 有 基于修改的拷贝语义的概念,例如在 Hadley 的 Devtools 维基中。
大多数 R 对象具有基于修改的复制语义,因此可以修改函数 参数不更改原始值
我可以将这个术语追溯到 R-Help 邮件列表,例如,Peter Dalgaard 在 二零零三年七月中写道:
R 是一种函数式语言,具有惰性计算和弱动态性 类型(变量可以随意改变类型: a <-1; a <-“ a”是 从语义上讲,所有东西都是基于修改的拷贝 在实现中使用了优化技巧,以避免出现最坏的情况 效率低下。
同样,彼得•达尔加德(Peter Dalgaard)在 至2004年1月底中写道:
R 具有基于修饰的拷贝语义(原则上,有时在 所以一旦一个对象的一部分发生变化,你可能不得不查看 任何包含它的东西的新地方,可能包括 物体本身。
甚至在更早的时候,罗斯 · 伊哈卡(Ross Ihaka)在 二零零零年二月上说:
我们为此付出了很多努力 语义作为“复制修改(如果必要)”。复制完成 只有当对象被修改的时候。(如果必要的话)部分意味着如果 我们可以证明,修改不能改变任何非局部 变量,那么我们只需要继续修改,不需要复制。
手册里没有
无论我怎么努力地搜索,我都找不到 R 手册中的“复制-修改”的引用,无论是在 语言定义中还是在 R 内部中
提问
我的问题分为两部分:
例如,既然 我保证被传递给函数,那么讨论“通过引用传递”是否合适?