从#5028
我如何知道宏中的类型类?例如,这个:
class A Const = 42 macro is_int(val) {% p "#{val} is int: #{val.is_a?(Int32)}" %} end is_int(Const) end
打印 false .
false
@asterite说:
is_a?在宏中检查节点是否属于给定的AST节点类型 .
因此,您应该使用 val.resolve.is_a?(NumberLiteral) .
val.resolve.is_a?(NumberLiteral)
Bonus: 如果要检查节点是否是类的后代,可以使用 val.resolve < AncestorClass (例如 val.resolve < ::Enum 来检查 val 是否为 Enum ) .
val.resolve < AncestorClass
val.resolve < ::Enum
val
Enum
1 回答
@asterite说:
因此,您应该使用
val.resolve.is_a?(NumberLiteral)
.Bonus: 如果要检查节点是否是类的后代,可以使用
val.resolve < AncestorClass
(例如val.resolve < ::Enum
来检查val
是否为Enum
) .