package scalaworld.macros
import scala.meta._
class Argument(arg: Int) extends scala.annotation.StaticAnnotation {
inline def apply(defn: Any): Any = meta {
println(this.structure)
val arg = this match {
// The argument needs to be a literal like `1` or a string like `"foobar"`.
// You can't pass in a variable name.
case q"new $_(${Lit(arg: Int)})" => arg
// Example if you have more than one argument.
case q"new $_(${Lit(arg: Int)}, ${Lit(foo: String)})" => arg
case _ => ??? // default value
}
println(s"Arg is $arg")
defn.asInstanceOf[Stat]
}
}
上記のマクロを修正し、型パラメータ[A]を追加したいと思います。 は、私は次のことを試してみましたが、それはマクロの注釈に渡される引数は、メタ木として渡され型パラメータをスカラメタマクロ/注釈に渡す
package scalaworld.macros
import scala.meta._
class Argument2[A](arg: A) extends scala.annotation.StaticAnnotation {
inline def apply(defn: Any): Any = meta {
println(this.structure)
val arg = this match {
case q"new $_(${Lit(arg: A)})" => arg
case q"new $_(${Lit(arg: A)}, ${Lit(foo: String)})" => arg
case _ => ???
}
println(s"Arg is $arg")
defn.asInstanceOf[Stat]
}
}
ここで説明するものに似た何かをしようとしています。https://github.com/scalameta/sips/blob/3520d5c761abfdfeff66d396456791971795f6af/sips/保留中/ _posts/2016-09-09-inline-meta.md#inlinemeta – Bate