【问题标题】:Scala: 'missing parameter type' when calling scala macro with a PartialFunction reifyScala:使用 PartialFunction reify 调用 scala 宏时出现“缺少参数类型”
【发布时间】:2015-02-25 11:04:04
【问题描述】:

编译器向我抛出“缺少参数类型”。在解决了这个问题后,我意识到在链接部分函数时,您需要明确说明类型,否则编译器会抛出上述错误。现在,你们知道在宏的 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 的工作原理?

【问题讨论】:

  • 这对你有多大的阻碍作用?
  • 并非如此。我认为地图可以完成这项工作

标签: scala macros partialfunction


【解决方案1】:

很遗憾,这似乎是一个已知问题:https://issues.scala-lang.org/browse/SI-6619

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 2012-02-23
    • 2019-09-12
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2014-02-08
    相关资源
    最近更新 更多