Используйте макросы scala для копирования метода из класса в объект-компаньон
Я пойду прямо к делу.
Допустим, у меня есть следующее определение черты:
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 ответ
Я пытаюсь сделать макрос под названием
routeOf[MyEvent]
вернуть ключ маршрутизации определенного класса.
То, как ваш код, это не ключ маршрутизации определенного класса, а экземпляра.
Если вы создаете несколько MyEvent
, нет никакой гарантии, что их ключи маршрутизации будут одинаковыми.
Что вы можете сделать, это создать объект-компаньон MyEvent
что происходит от Routable
, я чувствую classTag
или же typeTag
может быть достаточно для этого случая - вы знаете это? Макросы не нужны. Но пока я не знаю общую картину, сложно сказать, как бы я к ней подошел. Можете ли вы рассказать больше?:)