【发布时间】:2016-09-22 01:37:19
【问题描述】:
假设我有一张地图:%{a: "b"}。我是inspecting 它并得到"%{a: \"b\"}"。如何将此字符串转换为长生不老药中的地图?有什么优雅的方式吗?
【问题讨论】:
标签: elixir
假设我有一张地图:%{a: "b"}。我是inspecting 它并得到"%{a: \"b\"}"。如何将此字符串转换为长生不老药中的地图?有什么优雅的方式吗?
【问题讨论】:
标签: elixir
Code.eval_string/3 来救援:
iex(1)> {map, _binding} = Code.eval_string "%{a: \"b\"}"
{%{a: "b"}, []}
iex(2)> map
%{a: "b"}
【讨论】:
一般你不能。例如,假设您有一个 pid 作为值或键。当您将字符串脱水成地图时,pid 甚至可能不存在。
长生不老药中没有任何设施(我知道)可以做到这一点。
但您始终可以将地图编码为 json 并随时解码。除非瞬态引用,这应该可以工作。
【讨论】:
有些函数允许您将 Elixir 数据类型编组/解组为 :erlang.term_to_binary 和 :erlang.binary_to_term。然后可以将二进制字符串写入文件以供以后使用。但是,生成的二进制文件不是很可读。
inspect 协议旨在供人类阅读而不是编组数据结构。也许如果您避免不透明类型(如 Pid 或 Reference)和不完整列表的明显缺陷,Code.eval_string 技巧可以工作,但我对在一般情况下依赖它持谨慎态度。
【讨论】: