scala - 如何使用 scala 宏调用具有泛型类型参数的对象上的函数?

标签 scala generics scala-macros

考虑以下两个类,它们都有一个 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 2.12 中的 scala 宏实现吗?

最佳答案

尝试

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

关于scala - 如何使用 scala 宏调用具有泛型类型参数的对象上的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58535124/

相关文章:

java - spark如何向集群发送作业?

scala-macros - Scala 宏 : get param default value

Scala:以值为条件的隐式类型转换

scala - 如何在eclipse中调试sbt项目

scala - 无标签最终效果传播

scala - 在这个使用泛型的例子中,asInstanceOf 有什么问题吗?

java - 我的类是其他泛型类的子类吗?

generics - Kotlin类型不匹配,泛型

scala - 编写模式匹配宏

scala - 如何确定传递给宏的表达式是否始终产生相同的值?