【问题标题】:How do I convert List of Macros in to String in Elixir如何在 Elixir 中将宏列表转换为字符串
【发布时间】:2025-12-15 06:40:01
【问题描述】:

我有一个 Elixir 中的宏列表,并试图在它周围加上引号,请帮助我。

我想将[Id, Node, Timestamp] 转换为"[Id, Node, Timestamp]"

我该怎么做?

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: elixir


【解决方案1】:

[Id, Node, Timestamp]原子 的列表,而不是 的列表。

原子是简单的术语,因此简单的旧好的Kernel.inspect/2 就可以了。

inspect [Id, Node, Timestamp]
#⇒ "[Id, Node, Timestamp]"

【讨论】:

    【解决方案2】:

    如果你有一个引用的表达式,我相信Macro.to_string/2 就是你要找的。​​p>

    iex> ast = quote do: [Id, Node, Timestamp]
    [Id, Node, Timestamp]
    iex> Macro.to_string(ast)
    "[Id, Node, Timestamp]"
    

    然而,正如 Aleksei 指出的那样,原子列表的 AST 本身就是其本身,因此如果您只是想将其转换为字符串,Kernel.inspect/2 会完成同样的事情。

    【讨论】:

    • 引用原子列表的意义为零,因为列表和原子都已被引用表达式,等于它们的 AST。 Macro.to_string([Id, Node, Timestamp]) 效果一样。
    • Macro.to_string(ast) 有帮助。谢谢!