2017-03-18 67 views
0

在Scala 2.12.0中,當將函數文字賦值爲值時,輸出類似$$Lambda,而在2.11.8中則爲<functionX>。爲什麼會有這樣的改變? $$Lambda是否意味着在此處使用lambda表達式?Scala 2.12.0:將函數文字分配給值的輸出

2.12.0:

scala> val doubler = (x: Int) => x * 2 
doubler: Int => Int = $$Lambda$1276/[email protected] 

2.11.8:

scala> val doubler = (x: Int) => x * 2 
doubler: Int => Int = <function1> 

回答

2

在Java平臺上,斯卡拉2.12編譯器使用了與Java 8+編譯器使用匿名函數相同的編碼。因此,您所看到的差異基本上是在第一種情況下,您會看到來自Scala Function1[Int, Int]實例的toString()方法的輸出,而在第二種情況下,您會看到Java 8 Lambda的toString()

但是請注意,這是Scala-JVM編譯器的私有內部實現細節。你應該不是依靠它。它可能是,並且可能在Scala.js和Scala本機上不同。