Elixir中是否存在AST对应的@type类型定义?
Elixir中AST对应的类型定义与@spec写法
Elixir标准库提供了专门用于表示AST的类型Macro.t(),你可以直接用它来定义返回AST的函数的@spec:
@spec example() :: Macro.t() def example do quote do # ... end end
你观察到AST不只是元组是对的,因为Elixir的AST节点涵盖了多种形式:
- 基础数据类型(字符串、原子、数字、布尔值、nil)本身就是合法的AST节点
- 复杂表达式才会以元组形式存在,格式为
{操作符/函数名, 元数据, 参数列表}
比如这些都是合法的AST,都属于Macro.t()类型:
# 字符串AST节点 iex> quote do "Foo" end "Foo" # 原子AST节点 iex> quote do :hello end :hello # 数字AST节点 iex> quote do 42 end 42 # 元组形式的复杂表达式AST iex> quote do @example :A end {:@, [context: Elixir, imports: [{1, Kernel}]], [{:example, [context: Elixir], [:A]}]}
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

