为什么我在 Scala REPL 上的函数打印为“Lambda”?

Cat*_*ira 1 scala scala-repl

我在 Scala REPL 上创建了这个函数

scala> val multiDouble = (input :Double) =>
 |      {
 |          val toMulti = 2;
 |          toMulti * input 
 |      }: Double
Run Code Online (Sandbox Code Playgroud)

输出是val multiDouble: Double => Double = Lambda$1351/1709493124@7b44bfb8

根据我的研究,应该是val multiDouble: Double => Double = <function01>

我不明白为什么 Scala REPL 打印Lambda$1351/1709493124@7b44bfb8而不打印<function01>.

Dmy*_*tin 5

在 Scala 2.11- 中,函数被打印为<function01>,在 Scala 2.12+ 中,它们被打印为Lambda$.../...@...

2.12 lambda 有不同的toString https://github.com/scala/scala-dev/issues/67

@retronym:

如果我们使用LambdaMetaFactory,这是不可避免的,因为它没有公开提供 的实现的方法toString。(接口中的默认方法本身也不能覆盖对象中的方法)。

我们可以ScalaLambdaMetafactory精确地生成我们想要的内容,但风险是我们将放弃当前或未来针对 LMF 的 HotSpot 优化。

Scala 2.12.0:将函数文字赋值给值的输出

scala 中匿名函数与命名函数的数据类型

https://contributors.scala-lang.org/t/functionns-tostring-should-show-the-types/2572