Scala: «отсутствует тип параметра» при вызове макроса Scala с использованием PartialFunction reify

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


person ernestRC    schedule 25.02.2015    source источник
comment
Насколько это блокировщик для вас?   -  person Eugene Burmako    schedule 26.02.2015
comment
Не совсем. Я думаю, что карта справится с этой задачей   -  person ernestRC    schedule 26.02.2015


Ответы (1)


К сожалению, это похоже на известную проблему: https://issues.scala-lang.org/browse/SI-6619.

person Eugene Burmako    schedule 26.02.2015