Используйте макросы 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 может быть достаточно для этого случая - вы знаете это? Макросы не нужны. Но пока я не знаю общую картину, сложно сказать, как бы я к ней подошел. Можете ли вы рассказать больше?:)

Другие вопросы по тегам