4

WeakTypeTagorTypeが具象型を表しているかどうかを確認するにはどうすればよいですか? これは、ユーザーが指定した型が具体的でない場合にコンパイルエラーを発生させるために使用できるマクロで特に役立ちます。

def macroMethod[T]: Unit = macro macroMethod_impl[T]

def macroMethod_impl[T: c.WeakTypeTag](c: Context): c.Expr[Unit] = {
  import c.universe._

  def isConcrete(tpe: Type) = ???

  if(!isConcrete(weakTypeOf[T])) {
    c.error(c.enclosingPosition, "You must provide concrete type.")
  }

  c.literalUnit
}
4

1 に答える 1

1

これでうまくいくと思います:

def isConcrete(tpe: Type) = !tpe.typeSymbol.asType.isAbstractType

それから

scala> macroMethod[Int]

scala> class C[T] { macroMethod[T] }
<console>:10: error: You must provide concrete type.
       class C[T] { macroMethod[T] }
于 2013-04-09T10:17:34.737 に答える