为什么Scala需要def语句?

Uri*_*ren 6 javascript scala immutability

我是scala的新手,但我有javascript的背景.

虽然我看到需要分开valvar(可变和不可变),但我不明白为什么def应该需要这个陈述.

如果函数是真正的一等公民,就像在javascript中一样,为什么要声明它们def而不是声明val

该设计决策是基于JVM相关的约束,还是存在一些我无法理解的基础逻辑?

0__*_*0__ 9

函数的一个很大的局限是它们不能作为值通用.例如

def foo[A](bar: A): Unit
Run Code Online (Sandbox Code Playgroud)

这不能表示为函数值

val foo: A => Unit  // A is _not_ a type parameter
Run Code Online (Sandbox Code Playgroud)

这需要类型参数的解决方案A.其他差异是:方法带有一个自然概念this作为封闭类; 他们可以通过中止return.它们可以有多个参数列表,最重要的是隐式参数列表.他们有命名和默认参数.(我试图想象一个带有命名和默认参数的函数看起来如何,也许它可以被设计)

可能不可能只有函数值,但def似乎更好地匹配Scala的OO方面.