在 GitHub 上编辑此页面

自动 Eta 扩展

方法转换为函数的转换已得到改进,并且对于具有一个或多个参数的方法会自动发生。

def m(x: Boolean, y: String)(z: Int): List[Int]
val f1 = m
val f2 = m(true, "abc")

这将创建两个函数值

f1: (Boolean, String) => Int => List[Int]
f2: Int => List[Int]

m _ 语法不再需要,并且将在将来被弃用。

自动 eta 展开和空参数方法

自动 eta 展开不适用于采用空参数列表的“空参数”方法。

def next(): T

给定对 next 的简单引用不会自动转换为函数。必须显式编写 () => next() 才能实现这一点。同样,由于 _ 将被弃用,因此最好以这种方式编写,而不是 next _

将空参数方法排除在自动 eta 展开之外的原因是,Scala 隐式插入 () 参数,这将与 eta 展开冲突。自动 () 插入在 Scala 3 中有限制,但基本歧义仍然存在。

更多细节