2

type macrosスカラを探しました。しかし、例からオブジェクトを作成したい場合、エラーが発生しました:

Example.scala:7: `=', `>:', or `<:' expected
type Test(url: String) = macro impl

Example.scala:12: illegal start of simple expression
val clazz = ClassDef(..., Template(..., generateCode()))

コード:

//Example.sbt
object Example {

  type Test(url: String) = macro impl

  def impl(c:Context)(url: c.Expr[String]):c.Tree = {
    import c.universe._
    val name = c.freshName(c.enclosingImpl.name).toTypeName
    val clazz = ClassDef(..., Template(..., generateCode()))
    c.introduceTopLevel(c.enclosingPackage.pid.toString, clazz)
    val classRef = Select(c.enclosingPackage.pid, name)
    Apply(classRef, List(Literal(Constant(c.eval(url)))))
  }
} 

スカラのバージョン: 2.10.2

From:タイプマクロ

4

1 に答える 1

3

そんなに簡単だったら!リンク先のドキュメントから:

型マクロは、正式な Scala リポジトリの実験的なブランチである、いわゆるマクロ パラダイスに含まれるプレリリース機能です。「マクロ パラダイス」ページの指示に従って、ナイトリー ビルドをダウンロードして使用します。

と:

バイナリ互換性の制限により、2.10.x のマクロ パラダイスには、マクロ パラダイス 2.11.x の機能が準引用符を除いて含まれていないことに注意してください。

したがって、これを機能させたい場合は、2.11のMacro Paradiseブランチに移動する必要があります。

また、タイプ マクロのドキュメントの は、省略されたコードを示すことを目的としていることにも注意してください...。単純にコピー アンド ペーストすることはできません。

于 2013-06-26T18:10:09.083 に答える