我正在使用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] ^