理解方法VSs中的函数

时间:2017-07-13 16:33:52

标签: scala

我正在学习方法和功能之间的区别。我正在关注此链接

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

是因为我们使用的是其他版本吗?请帮忙。

1 个答案:

答案 0 :(得分:2)

Scala 2.11及更早版本的行为如博文中所示。

Scala 2.12中的行为已更改。 Scala现在使用添加到JVM版本8的lambda支持,因此它不需要发出额外的.class文件。因此,2.12生成的.jar文件通常要小得多。

作为其副作用,Scala不能再覆盖toString,因此您可以看到lambdas的标准JVM toString输出。