【问题标题】:Inspect back - convert string to map in elixir检查回来 - 在长生不老药中将字符串转换为映射
【发布时间】:2016-09-22 01:37:19
【问题描述】:

假设我有一张地图:%{a: "b"}。我是inspecting 它并得到"%{a: \"b\"}"。如何将此字符串转换为长生不老药中的地图?有什么优雅的方式吗?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    Code.eval_string/3 来救援:

    iex(1)> {map, _binding} = Code.eval_string "%{a: \"b\"}"
    {%{a: "b"}, []}
    iex(2)> map
    %{a: "b"}
    

    【讨论】:

    • 噢!没想到那个。
    【解决方案2】:

    一般你不能。例如,假设您有一个 pid 作为值或键。当您将字符串脱水成地图时,pid 甚至可能不存在。

    长生不老药中没有任何设施(我知道)可以做到这一点。

    但您始终可以将地图编码为 json 并随时解码。除非瞬态引用,这应该可以工作。

    【讨论】:

      【解决方案3】:

      有些函数允许您将 Elixir 数据类型编组/解组为 :erlang.term_to_binary:erlang.binary_to_term。然后可以将二进制字符串写入文件以供以后使用。但是,生成的二进制文件不是很可读。

      inspect 协议旨在供人类阅读而不是编组数据结构。也许如果您避免不透明类型(如 Pid 或 Reference)和不完整列表的明显缺陷,Code.eval_string 技巧可以工作,但我对在一般情况下依赖它持谨慎态度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-27
        • 2020-12-08
        • 2019-08-04
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        相关资源
        最近更新 更多