0

我会直接谈生意。

假设我有以下特征定义:

trait Routable{
    def routing(): String
}

我正在定义以下类:

case class MyEvent(name: String, age: Int) extends Routable{
    override def routing(): String = "this is my routing key"
}

我正在尝试调用一个宏routeOf[MyEvent]来返回已定义类的路由键。

在过去的 3 天里我尝试了很多东西,我开始怀疑这是否可能......

我的宏定义是:

def routeOf[T]: Any = macro RouteOfMacro.impl[T] def impl[T: c.WeakTypeTag](c: whitebox.Context): c.Tree

但是我找不到如何从 WeakTypeTag 中提取方法(并且互联网上的示例并不完整)。

那么可以做到吗?

4

1 回答 1

0

我正在尝试调用一个宏routeOf[MyEvent]来返回已定义类的路由键。

您的代码的方式不是定义类的路由键,而是实例的路由键。

如果您创建多个MyEvent,则不能保证它们的路由键是相同的。

您可以做的是创建一个MyEvent派生自Routable. 对于这种情况,我觉得classTag或者typeTag可能就足够了——你知道吗?不需要宏。但在我了解大局之前,很难说我会如何处理它。你能透露更多吗?:)

于 2018-04-01T15:37:18.597 回答