我有下一個代碼,我想從值中提取默認參數。Scala宏:獲取參數默認值
//
def extractor[T] = macro extractorImpl[T]
def extractorImpl[T: c.WeakTypeTag](c: Context) = {
//first i got a type contructor
???
}
我嘗試用attachments
但attachments.all
用(例如)SymbolSourceAttachment(val name: String = "new name")
SymbolSourceAttachment
包含ValDef
返回Set[Any]
,但我不知道如何從SymbolSourceAttachment
ValDef
提取。
順便說我應該得到一個Map[String, String]("name" -> "new name")
例子:
case class Person(name: String = "new name")
object Macro {
def extractor[T] = macro extractorImpl[T]
def extractorImpl[T: c.WeakTypeTag](c: Context) = {
import c.universe._
c.weakTypeOf[T].declarations.collect {
case a: MethodSymbol if a.isConstructor =>
a.paramss.collect {
case b => b.collect {
case c =>
c.attachments.all {
case d => println(showRaw(d)) // => SymbolSourceAttachment(val name: String = "new name")
}
}
}
}
}
}
而且宏應該返回Map("name" -> "new name")
我不確定我瞭解宏應該達到什麼。你能詳細說明一下嗎?通過提供示例輸入和輸出? –
@EugeneBurmako更新與例子 – lito