在访问 Scala 宏中的参数值时的编译问题之后,我想定义一个应用谓词的宏。如果存在语句 fn = c.eval( pred ),则客户端代码无法编译,而没有任何关于问题性质的指示。
def fnInvocation( value : Int, pred : c.Expr[ Int => Boolean ] ): Boolean = fnInvocationImpl
def fnInvocationImpl(c: Context)( value : Int, pred : c.Expr[ Int => Boolean ] ) : c.Expr[Boolean] = {
var fn = x => x % 2 == 0
// fn = c.eval( pred ) // client compilation fails if this line is included
val result = fn( value )
c.literal( result )
}
我应该能够从宏中执行此操作吗?