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

更多詳細資料