【发布时间】:2018-06-04 10:47:07
【问题描述】:
我正在尝试将 scala 对象转换为 js 对象
object SObject {
def foo(in:String):String = s"scalajs-$in"
}
val o = ScalaObjectToJSObjectMacro(SObject) // js.Dynamical.literal(foo = (in:String) => s"scalajs-$in")
在宏中,我能够获取对象的所有方法(in.tpe.decls.toList),然后对于每个方法名称、returnType、参数在 MethodSymbolApi 中可用,但没有主体树:s
object ScalaObjectToJSObjectMacro {
def apply[T](in: T): js.Object = macro macroImpl
def macroImpl(c: blackbox.Context)(in: c.Tree): c.Tree = {
import c.universe._
val methods = in.tpe.decls.toList
.filter(s => {
s.isMethod && s.asMethod.isPublic && !s.asMethod.isConstructor
})
.map(m => {
val mt = m.asMethod
val name = mt.name
val returnType = mt.returnType
val params = mt.paramLists
val body = ??? //TODO
})
println(s"methods: ${methods}")
q"""
scala.scalajs.js.Dynamic.literal()
"""
}
}
【问题讨论】:
标签: scala macros scala-macros