Scala,函数的字符串表示

Dan*_*yel 2 string scala function representation

有没有办法可以获得函数的字符串表示?

val f = List(1, 2, 3, 4, 66, 11).foldLeft(55)_

f是一个类型的函数((Int, Int) => Int) => Int,这将是我正在寻找的表示,但我无法在任何地方找到它.

toString当然,这个方法是我的第一次尝试,但它返回的只是<function1>.scala REPL做得对,文档也是如此.一定有办法吗?

问候.

kir*_*uku 5

在编译时知道类型时,您可以使用Scalas TypeTag:

scala> import reflect.runtime.universe._
import reflect.runtime.universe._

scala> def typeRep[A : TypeTag](a: A) = typeOf[A]
typeRep: [A](a: A)(implicit evidence$1: reflect.runtime.universe.TypeTag[A])reflect.runtime.universe.Type

scala> val f = List(1, 2, 3, 4, 66, 11).foldLeft(55)_
f: ((Int, Int) => Int) => Int = <function1>

scala> typeRep(f)
res2: reflect.runtime.universe.Type = ((Int, Int) => Int) => Int
Run Code Online (Sandbox Code Playgroud)

有关TypeTag正在做什么的详细说明,请参阅另一个答案.

  • 我给了你一个关于 SO 的另一个答案的链接,解释了 TypeTag 正在做什么。我认为反思是实现你想要的最简单的方法。 (2认同)