当作为函数参数传递时,elixir是否制作了地图的副本?

时间:2016-10-12 10:29:22

标签: elixir elixir-framework

换句话说,我想知道在灵丹妙药中是否通过值或引用将地图传递给函数。我怀疑Elixir的无副作用原则是值得的。但是,大地图不会产生巨大的重复效率低下吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

由于Elixir中的所有术语都是不可变的,因此对于用户来说,参数是否通过"值是"或"参考"。您永远不能修改函数中术语的值,并将其反映在调用者发送给函数的变量中。具体地图可以被认为是通过引用"传递的,因为只有指向它们的指针被VM发送到该功能,这非常有效。

需要注意的一点是,VM传递给其他进程的术语被深度复制。唯一的例外是"大"字符串,通常> 64个字节,作为对全局二进制堆的引用传递,并使用引用计数进行垃圾回收。

  

我怀疑Elixir的无副作用原则是值得的。

Elixir不纯,它有副作用。例如,您可以将I / O添加到任何功能。你可能意味着没有可变的值。