相关疑难解决方法(0)

揭穿斯卡拉神话

关于Scala语言最常见的误解是什么,以及这些例子中存在哪些反例?

UPDATE

我正在考虑更多关于我见过的各种声明,例如"Scala是动态类型"和"Scala是一种脚本语言".

我接受"Scala是[简单/复杂]"可能被认为是一个神话,但它也是一个非常依赖于上下文的观点.我个人认为,这些功能可以使Scala显得简单或复杂,具体取决于谁使用它们.最终,语言只提供抽象,而这就是用来塑造感知的方式.

不仅如此,它还有一定的激烈争论的倾向,而且我还没有看到有人改变对该主题的强烈观点......

programming-languages scala

58
推荐指数
12
解决办法
5863
查看次数

在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)

methods scala function implicit-conversion

17
推荐指数
1
解决办法
1818
查看次数

获取对arity-0 scala函数的引用

Scala允许在没有括号的情况下调用没有参数列表的函数:

scala> def theAnswer() = 42
theAnswer: ()Int

scala> theAnswer
res5: Int = 42
Run Code Online (Sandbox Code Playgroud)

我将如何构造一个scala表达式来计算函数theAnswer本身,而不是结果theAnswer?或者换句话说,我将如何修改表达式theAnswer,以便结果是类型() => Int,而不是类型Int

types scala invocation

1
推荐指数
1
解决办法
288
查看次数