Рассмотрим следующие два класса, оба имеют функцию parseFrom
.
class X {}
object X {
def parseFrom(b: Array[Byte]): String = "Hello"
}
class Y {}
object Y {
def parseFrom(b: Array[Byte]): String = "HelloY"
}
Я хочу написать макрос: getParseFrom[X]
, который возвратит функцию X.parseFrom
.
Это то, что я имею до сих пор:
import scala.reflect.macros.whitebox.Context
def getParseFromImpl[T: c.WeakTypeTag](c: Context): c.Tree = {
import c.universe._
val tpe = weakTypeOf[T]
q"""
$tpe.parseFrom(_)
"""
}
def getParseFrom[T]: Array[Byte] => String = macro getParseFromImpl[T]
Возможно ли это с помощью макросов scala в scala 2.12?