我正在学习方法和功能之间的区别。我正在关注此链接
http://jim-mcbeath.blogspot.co.uk/2009/05/scala-functions-vs-methods.html
文章说如果编译以下代码:
class test {
def m1(x:Int) = x+3
val f1 = (x:Int) => x+3
}
我们应该得到两个文件 test.class 2.测试$$ anonfun $ 1.class
但我不明白。其次,示例说如果我们在REPL中执行以下命令,我们将得到以下
scala> val f1 = (x:Int) => x+3
f1: (Int) => Int = <function>
但我只得到这个
scala> val f1 = (x:Int) => x+3
f1: Int => Int = $$Lambda$1549/1290654769@6d5254f3
是因为我们使用的是其他版本吗?请帮忙。
答案 0 :(得分:2)
Scala 2.11及更早版本的行为如博文中所示。
Scala 2.12中的行为已更改。 Scala现在使用添加到JVM版本8的lambda支持,因此它不需要发出额外的.class
文件。因此,2.12生成的.jar
文件通常要小得多。
作为其副作用,Scala不能再覆盖toString
,因此您可以看到lambdas的标准JVM toString
输出。