宏返回类型和更高阶函数

时间:2012-07-27 04:50:57

标签: scala macros scala-2.10

我正在使用2.10.0-M5来使用Scala宏,我无法弄清楚为什么编译器认为返回类型是Any而不是List[Int]。如果我删除对map的调用并返回列表(将宏的最后一行更改为c.Expr(list)),它将按预期工作。此外,宏确实返回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 个答案:

答案 0 :(得分:2)