2

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

1 に答える 1

2

https://issues.scala-lang.org/browse/SI-6155

于 2012-07-27T06:23:53.930 に答える