0

По какой-то причине каждый раз, когда я пытаюсь вызвать функцию с неявным параметром из quasiquotes, он терпит неудачу с Can't unquote x.universe.Tree, consider providing an implicit instance of Liftable[x.universe.Tree]Вызов функции с неявным параметром из quasioquote

Что случилось с этим? Разве мне не разрешено это делать? Я не мог найти где-нибудь, где он говорит, что я не могу сделать это

import scala.language.experimental.macros 
import scala.reflect.macros.whitebox 

object Foo { 
    def foo: Unit = macro fooImpl 

    def fooImpl(c: whitebox.Context): c.Expr[Unit] = { 
    import c.universe._ 
    implicit val x = c  

    val res = q"$sysoutFQN" 
    c.Expr(res) 
    } 

    def sysoutFQN(implicit c: whitebox.Context): c.universe.Tree = { 
    import c.universe._ 
    q"java.lang.System.out.println()" 
    } 
} 

ответ

1

потому, что путь зависит так c.universe.Tree != x.universe.Tree

поэтому вам нужно написать х тип

implicit val x: c.type = c