Как вызвать функцию для объекта с параметром универсального типа, используя макросы scala? - PullRequest
2 голосов
/ 24 октября 2019

Рассмотрим следующие два класса, оба имеют функцию 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?

1 Ответ

2 голосов
/ 24 октября 2019

Попробуйте

q"""
  ${tpe.typeSymbol.companion}.parseFrom(_)
"""
...