首页 文章

检查宏中的节点类型

提问于
浏览
1

#5028

我如何知道宏中的类型类?例如,这个:

class A
  Const = 42

  macro is_int(val)
    {% p "#{val} is int: #{val.is_a?(Int32)}" %}
  end

  is_int(Const)
end

打印 false .

1 回答

  • 2

    @asterite说:

    is_a?在宏中检查节点是否属于给定的AST节点类型 .

    因此,您应该使用 val.resolve.is_a?(NumberLiteral) .

    Bonus: 如果要检查节点是否是类的后代,可以使用 val.resolve < AncestorClass (例如 val.resolve < ::Enum 来检查 val 是否为 Enum ) .

相关问题