代码之家  ›  专栏  ›  技术社区  ›  Kim Stebel

宏返回类型和更高阶函数

  •  2
  • Kim Stebel  · 技术社区  · 12 年前

    我正在使用2.10.0-M5玩Scala宏,我不明白为什么编译器认为返回类型是 Any 而不是 List[Int] 。如果我删除对映射的调用,只返回列表(将宏的最后一行更改为 c.Expr(list) ),它按预期工作。此外,宏确实返回 列表[Int] ,编译器就是不知道。

    宏定义:

    def test(s:String) = macro testImpl
    
    def testImpl(c:Context)(s:c.Expr[String]):c.Expr[Any] = {
      import c.universe._
      val list = reify(List(1)).tree
    
      val function = reify((x:Int) => x).tree
    
      val res = 
        Apply(
          Select(
            list,
            newTermName("map")),
          List(function)
        )
    
      c.Expr(res)
    }
    

    宏调用:

    val list:List[Int] = test("")
    

    错误消息:

    [error]  found   : Any
    [error]  required: List[Int]
    [error]     val list:List[Int] = test("")
    [error]                              ^
    
    1 回复  |  直到 12 年前