关于Scala语言最常见的误解是什么,以及这些例子中存在哪些反例?
UPDATE
我正在考虑更多关于我见过的各种声明,例如"Scala是动态类型"和"Scala是一种脚本语言".
我接受"Scala是[简单/复杂]"可能被认为是一个神话,但它也是一个非常依赖于上下文的观点.我个人认为,这些功能可以使Scala显得简单或复杂,具体取决于谁使用它们.最终,语言只提供抽象,而这就是用来塑造感知的方式.
不仅如此,它还有一定的激烈争论的倾向,而且我还没有看到有人改变对该主题的强烈观点......
我想了解为什么eta-expansion(§6.26.5)不适用于重载方法.例如,如果我有以下两种方法:
def d1(a: Int, b: Int) {}
def r[A, B](delegate: (A, B) ? Unit) {}
Run Code Online (Sandbox Code Playgroud)
我可以做这个:
r(d1)
Run Code Online (Sandbox Code Playgroud)
但是,当重载r时它将不再起作用:
def r[A, B](delegate: (A, B) ? Unit) {}
def r[A, B, C](delegate: (A, B, C) ? Unit) {}
r(d1) // no longer compiles
Run Code Online (Sandbox Code Playgroud)
我必须显式地将方法转换为部分应用的函数:
r(d1 _)
Run Code Online (Sandbox Code Playgroud)
有没有办法通过显式转换完成以下操作?
def r[A, B](delegate: (A, B) ? Unit) {}
def r[A, B, C](delegate: (A, B, C) ? Unit) {}
def d1(a: Int, b: Int) {}
def d2(a: Int, b: Int, c: Int) {}
r(d1) …Run Code Online (Sandbox Code Playgroud) Scala允许在没有括号的情况下调用没有参数列表的函数:
scala> def theAnswer() = 42
theAnswer: ()Int
scala> theAnswer
res5: Int = 42
Run Code Online (Sandbox Code Playgroud)
我将如何构造一个scala表达式来计算函数theAnswer本身,而不是结果theAnswer?或者换句话说,我将如何修改表达式theAnswer,以便结果是类型() => Int,而不是类型Int?