如何在Elixir中保存HashDicts文件

ste*_*e77 10 elixir

任务是使用Elixir在文件中保存和加载结构的HashDict.我正计划迭代HashDict并在文件的每一行写出一个结构.但是,我无法在Google上找到有关如何将Struct或Dict保存到文件的任何内容.特别是,是否有内置的序列化Dicts的方法?

我尝试先转换为字符串.iex片段: -

iex(68)> {:ok,of} = File.open("ztest.txt", [:write, :utf8])
{:ok, #PID<0.232.0>}
iex(69)> IO.write(of, {:atuple, "abc"})                    
** (Protocol.UndefinedError) protocol String.Chars not implemented for {:atuple, "abc"}
Run Code Online (Sandbox Code Playgroud)

有人想知道如何为地图或元组实现String.chars的实现吗?

此外,是否可以将IO.inspect的输出传输到文件中?我尝试这样做是不成功的.

Chr*_*ord 21

您可以使用:erlang.term_to_binary和:erlang.binary_to_term来序列化和反序列化您的HashDict:

iex> dict = HashDict.new |> Dict.put(:struct1, %{some: :struct})
#HashDict<[struct1: %{some: :struct}]>
iex> File.write! "encoded.txt", :erlang.term_to_binary(dict)
:ok
iex> File.read!("encoded.txt") |> :erlang.binary_to_term
#HashDict<[struct1: %{some: :struct}]>
Run Code Online (Sandbox Code Playgroud)

  • 只是对此的更新:HashDict 已被弃用,但这也可以用于地图 (3认同)