繁体   English   中英

Elixir:惯用地克隆列表

[英]Elixir: clone a list idiomatically

我总是可以做这样的事情:

new_list = Enum.map(old_list, fn x -> x end)

当然,还有更多的平等或略微丑陋的方法。 不知何故,我找不到复制列表的惯用方式。 当然一定有办法。

Elixir是一门不变的语言,所以惯用的方式是这样的:

clone = original

无需“克隆”。 分配给现有变量的数据无法编辑,因此从概念上将一个变量分配给另一个变量将得到数据的副本。 您无法编辑现有数据-如果您重新分配给现有变量,则从概念上讲该变量指向新的数据结构。

original = [1, 2, 3] |> IO.inspect(label: "original")
clone = original |> IO.inspect(label: "clone")
prepended = [0 | original] |> IO.inspect(label: "prepended")
original |> IO.inspect(label: "original again")
original = [5, 6, 7] |> IO.inspect(label: "original rebound")
clone |> IO.inspect(label: "clone again")

输出:

original: [1, 2, 3]
clone: [1, 2, 3]
prepended: [0, 1, 2, 3]
original again: [1, 2, 3]
original rebound: [5, 6, 7]
clone again: [1, 2, 3]

由于Elixir中的数据结构是不可变的,因此我想不出您需要“克隆”列表的原因。 它什么也不会做。 话虽这么说,如果您正在寻找一种不做任何事情的方法,那么可以联系Enum.to_list/1

iex> Enum.to_list([1, 2, 3])
[1, 2, 3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM