Scala:'missing parameter type' 使用 PartialFunction reify 调用 scala 宏时
Scala: 'missing parameter type' when calling scala macro with a PartialFunction reify
编译器给我一个'Missing parameter type'。解决问题后,我意识到在链接部分函数时,您需要明确类型,否则编译器会抛出上述错误。现在,你们知道在宏的具体化中链接部分函数时是否有任何问题吗?我想我不能更明确地说明部分函数类型:
object Implementations{
def missingParamType_impl(c: whitebox.Context)(a: c.Expr[Int]):c.Expr[PartialFunction[Int,String]] = {
import c.universe._
reify {
val spliced = a.splice
val spliced2 = a.splice * 2
((PartialFunction.apply[Int,String]{
case `spliced` ⇒ a.splice.toString
} : PartialFunction[Int,String]).orElse[Int,String]{
case `spliced2` ⇒ a.splice.toString
} : PartialFunction[Int,String]) : PartialFunction[Int,String]
}
}
}
我是这样调用宏实现的:
object Macros {
def missingParamType(a: Int):PartialFunction[Int,String] = macro Implementations.missingParamType_impl
}
我也试过这个:
def missingParamType_impl(c: whitebox.Context)(a: c.Expr[Int]):c.Expr[PartialFunction[Int,String]] = {
import c.universe._
reify {
val spliced = a.splice
val spliced2 = a.splice * 2
val pf1: PartialFunction[Int, String] = {
case `spliced` ⇒ a.splice.toString
}
val pf2: PartialFunction[Int, String] = {
case `spliced2` ⇒ a.splice.toString
}
val PF:PartialFunction[Int, String] = pf1.orElse(pf2)
PF
}
}
还是我从根本上误解了 reify 的工作原理?
不幸的是,这看起来像是一个已知问题:https://issues.scala-lang.org/browse/SI-6619。
编译器给我一个'Missing parameter type'。解决问题后,我意识到在链接部分函数时,您需要明确类型,否则编译器会抛出上述错误。现在,你们知道在宏的具体化中链接部分函数时是否有任何问题吗?我想我不能更明确地说明部分函数类型:
object Implementations{
def missingParamType_impl(c: whitebox.Context)(a: c.Expr[Int]):c.Expr[PartialFunction[Int,String]] = {
import c.universe._
reify {
val spliced = a.splice
val spliced2 = a.splice * 2
((PartialFunction.apply[Int,String]{
case `spliced` ⇒ a.splice.toString
} : PartialFunction[Int,String]).orElse[Int,String]{
case `spliced2` ⇒ a.splice.toString
} : PartialFunction[Int,String]) : PartialFunction[Int,String]
}
}
}
我是这样调用宏实现的:
object Macros {
def missingParamType(a: Int):PartialFunction[Int,String] = macro Implementations.missingParamType_impl
}
我也试过这个:
def missingParamType_impl(c: whitebox.Context)(a: c.Expr[Int]):c.Expr[PartialFunction[Int,String]] = {
import c.universe._
reify {
val spliced = a.splice
val spliced2 = a.splice * 2
val pf1: PartialFunction[Int, String] = {
case `spliced` ⇒ a.splice.toString
}
val pf2: PartialFunction[Int, String] = {
case `spliced2` ⇒ a.splice.toString
}
val PF:PartialFunction[Int, String] = pf1.orElse(pf2)
PF
}
}
还是我从根本上误解了 reify 的工作原理?
不幸的是,这看起来像是一个已知问题:https://issues.scala-lang.org/browse/SI-6619。