在“正常”的代码,可以使用klass.is_a?(Reference.class)
检查类是否与class
或struct
实现内部类或结构:重启宏观
Array.is_a?(Reference.class) #=> true
Tuple.is_a?(Reference.class) #=> false
不过,我似乎无法弄清楚如何在宏中执行相同的操作来重新打开所述类/结构体。
例如:如果我的Array
类传递给我的宏,我需要生成开始class Array
代码,而对于Tuple
它需要struct Tuple
。
我一遍又一遍地读了docs for Crystal::Macros,但是我不能拿出能够满足我需要和编译的代码。
谢谢@asterite!我的宏可以以两种方式使用,我重载了定义:https://github.com/citizen428/protocols即使我决定再次删除它,我也学到了很多关于Crystal试图弄清楚的地方。 –