使用scala宏将方法从类复制到companion对象

时间:2018-04-01 14:32:45

标签: scala scala-macros scala-quasiquotes

我会直接接受这项业务。

让我们说我有以下特质定义:

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中提取方法(并且互联网没有完整的示例)。

那可以吗?

1 个答案:

答案 0 :(得分:0)

  

我正在尝试创建一个名为routeOf[MyEvent]的宏来返回   定义类的路由键。

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

如果您创建多个MyEvent,则无法保证其路由密钥相同。

您可以做的是创建一个源自MyEvent的伴随对象Routable。我觉得classTagtypeTag对于这种情况可能就够了 - 你知道吗?不需要宏。但直到我知道更大的图片,很难说我将如何处理它。你能透露更多吗? :)