【问题标题】:Check node type in macros检查宏中的节点类型
【发布时间】:2017-09-24 16:32:15
【问题描述】:

来自#5028

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

class A
  Const = 42

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

  is_int(Const)
end

打印false

【问题讨论】:

    标签: macros metaprogramming crystal-lang


    【解决方案1】:

    @asterite 说:

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

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

    奖励:如果你想检查节点是否是一个类的后代,你可以使用val.resolve < AncestorClass(例如val.resolve < ::Enum来检查val是否是Enum)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多