簡體   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