Компилятор выдает мне «Отсутствует тип параметра». После решения проблемы я понял, что при цепочке частичных функций вам нужно явно указывать типы, иначе компилятор выдаст указанную ошибку. Теперь, ребята, вы знаете, есть ли какие-либо проблемы при цепочке частичных функций внутри макроса reify? Я думаю, что я не мог бы более подробно рассказать о типах частичных функций:
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?