标签: macros metaprogramming crystal-lang
来自#5028
我如何知道宏中的类型类?例如,这个:
class A Const = 42 macro is_int(val) {% p "#{val} is int: #{val.is_a?(Int32)}" %} end is_int(Const) end
打印false。
false
答案 0 :(得分:2)
@asterite说:
宏中的 is_a?检查节点是否属于给定的AST node类型。
is_a?检查节点是否属于给定的AST node类型。
is_a?
因此,您应该使用val.resolve.is_a?(NumberLiteral)代替。
val.resolve.is_a?(NumberLiteral)
加分:如果您想检查某个节点是否是某个类的后代,您可以使用val.resolve < AncestorClass(例如val.resolve < ::Enum来检查val是否为{ {1}})。
val.resolve < AncestorClass
val.resolve < ::Enum
val