У меня есть следующий макрос определения класса и возвращает экземпляр этого класса (с Scala 2.10.2 и макро-плагин):метод не может быть доступна в Macro сгенерированного класса
def test[T] = macro testImpl[T]
def testImpl[T : c.WeakTypeTag](c: Context): c.Expr[Any] = {
import c.universe._
val className = newTypeName("Test")
c.Expr { q"""
class $className {
def method = 1
}
new $className
"""}
}
Когда я называю макро :
case class Cat(name: String)
val t = test[Cat].method
Я получаю следующее сообщение об ошибке:
method method in class Test cannot be accessed in Test
val t = test[Cat].method
^
Моя общая цель состоит в том, чтобы использовать vampire methods и использовать квази-кавычки для описания сгенерированного класса. Как я могу решить эту ошибку?
Разве ваш синтезированный класс не расшифровывает черту, которая абстрактно определяет метод? –
Нет, потому что мне нужно сгенерировать эти методы с определенными именами. И, пытаясь сделать это, я понял, что даже не могу получить доступ к не созданным методам. Я подозреваю, что здесь я не использую квазициты. – Eric
Я понятия не имел, что теперь есть плагин для компилятора для mac paradise (в отличие от принудительного использования разветвленного компилятора). Если только для того, чтобы узнать это, большое спасибо за ваш вопрос. –