自动 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 中有限制,但基本歧义仍然存在。
本文介绍