Я пишу аннотацию макроса Scala @model
, используемую для аннотирования классов case и которая автоматически добавляет некоторые метаданные к сопутствующему объекту аннотированного класса на основе полей класс аннотированного случая.Получение WeakTypeTag для заданного типа в аннотации макроса Scala
Я хотел бы получить дополнительную информацию о типе параметров класса case, особенно, проверить, реализуют ли они определенный признак. Я думал получить WeakTypeTag
, потому что для них был путь, но я не могу понять, как они получены в макросах def.
Конкретно: я хочу, чтобы иметь возможность сказать, в данном случае, от макро реализации @model
, что address
поля User
класса имеет тип, который проходит ModelObject
, и что date
не делает. Я могу это сделать?
trait ModelObject
@model case case Address(street: String, city: String) extends ModelObject
@model case class User(name: String, since: Date, address: Address) extends ModelObject
Спасибо большое, Юджин. Я пытаюсь «val tpe = c.typeCheck (q» (???: $ typeTree) »). Tpe', где' typeTree' является 'tpt' членом' ValDef', который я проверяю, но я получите ошибку «c.universe.Name ожидается, но c.universe.Tree found». Что мне не хватает? –
Попробуйте вставить пробел между ??? а также :. –
Отлично, это работает, спасибо большое! Является ли это особым прецедентом, что не потребовалось бы добавить что-то вроде 'c.typeOf (tree)', что бы это сделать? –