自動 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 中是有限的,但基本模糊性仍然存在。
本文內容