【发布时间】:2016-10-12 18:37:41
【问题描述】:
换句话说,我想知道在 elixir 中,映射是通过值还是通过引用传递给函数的。考虑到 Elixir 的无副作用原则,我怀疑这是按价值计算的。但是大地图不会造成巨大的重复效率低下吗?
提前感谢您的帮助。
【问题讨论】:
标签: elixir
换句话说,我想知道在 elixir 中,映射是通过值还是通过引用传递给函数的。考虑到 Elixir 的无副作用原则,我怀疑这是按价值计算的。但是大地图不会造成巨大的重复效率低下吗?
提前感谢您的帮助。
【问题讨论】:
标签: elixir
由于 Elixir 中的所有术语都是不可变的,因此无论参数是“按值”传递还是“按引用”传递,用户都没有区别。您永远不能修改函数中术语的值,并将其反映在调用者发送给函数的变量中。 Maps 具体可以被认为是“通过引用”传递的,因为只有指向它们的指针由 VM 发送给函数,这是非常有效的。
需要注意的一点是,传递给其他进程的术语被 VM 深度复制。唯一的例外是“大”字符串,通常 > 64 字节,作为对全局二进制堆的引用传递,并使用引用计数进行垃圾回收。
考虑到 Elixir 的无副作用原则,我怀疑这是价值。
灵药不纯,有副作用。例如,您可以将 I/O 添加到任何函数。您可能意味着没有可变值。
【讨论】:
map = %{...}; spawn(fn -> IO.inspect(map) end)?