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] ^