У меня есть следующий код;Implicits and blackbox macros
def $q[U](selector: T => U, value: U)(implicit writer: BSONDocumentWriter[U]): BSONDocument = macro MacrosImpl.getBsonExpr[T, U]
Код getBsonExpr является;
def getBsonExpr[T, U](c: Context)(selector: c.Expr[T => Any], value: c.Expr[U])(implicit writer: BSONDocumentWriter[U]): c.Expr[BSONDocument] = {
import c.universe._
val helper = new Helper[c.type, T](c, selector)
reify {
val p = helper.pathStringExpr().splice
val v = value.splice
BSONDocument(p -> writer.write(v))
}
}
Однако вы не можете передать implicits в макрос, поэтому, когда я скомпилировать я получаю:
macro implementations cannot have implicit parameters other than WeakTypeTag evidences
Есть ли способ обойти это?
Хотя мне нравится код на первый взгляд, компилятор жалуется 'c.inferImplicitValue (TYPEOF [BSONDocumentWriter])'. Это говорит; 'trait BSONDocumentWriter принимает параметры типа'. Когда я перехожу в 'U', он пропускает' TypeTag'. 'WeakTypeTag' недостаточно, кажется. –
Мой плохой. Я забыл, что «BSONDocumentWriter» принял аргумент типа. Я исправлю это в ближайшее время. – Leo