在某些情況下,你可以省略被視為重複的方法呼叫參數。
這些參數稱為情境參數,因為它們是由編譯器從方法呼叫周圍的情境推論出來的。
例如,考慮一個透過兩個條件(城市名稱和街道名稱)來對地址清單進行排序的程式。
val addresses: List[Address] = ...
addresses.sortBy(address => (address.city, address.street))
sortBy
方法會採用一個函式,為每個地址傳回一個值,以便將其與其他地址進行比較。在此情況下,我們傳遞一個函式,傳回包含城市名稱和街道名稱的配對。
請注意,我們只指出要比較什麼,但沒有指出如何執行比較。排序演算法如何知道如何比較 String
配對?
實際上,sortBy
方法會採用第二個參數,也就是編譯器推論的內容參數。它不會出現在上述範例中,因為它是由編譯器提供的。
這個第二個參數會實作比較方式。省略它很方便,因為我們知道 String
通常會使用字典順序來比較。
不過,也可以明確傳遞它
addresses.sortBy(address => (address.city, address.street))(Ordering.Tuple2(Ordering.String, Ordering.String))
addresses.sortBy(address => (address.city, address.street))(using Ordering.Tuple2(Ordering.String, Ordering.String))
在 Scala 3 中,using
在 sortBy
的引數清單中表示明確傳遞內容參數,避免歧義。
在此情況下,Ordering.Tuple2(Ordering.String, Ordering.String)
執行個體就是編譯器推論出的執行個體。換句話說,這兩個範例會產生相同的程式。
內容抽象化 用於避免重複程式碼。它們協助開發人員撰寫可擴充且簡潔的程式碼片段。
此頁面的貢獻者
內容
- 簡介
- Scala 功能
- 為什麼選擇 Scala 3?
- Scala 體驗
- Hello, World!
- REPL
- 變數和資料類型
- 控制結構
- 網域建模
- 方法
- 一級函式
- 單例物件
- 集合
- 情境抽象
- 頂層定義
- 摘要
- 類型簡介
- 字串內插
- 控制結構
- 網域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法功能
- Scala 3 中的主要方法
- 摘要
- 函式
- 匿名函式
- 函式變數
- Eta 展開
- 高階函式
- 撰寫自己的 map 方法
- 建立會傳回函式的函式
- 摘要
- 封裝和匯入
- Scala 集合
- 集合類型
- 集合方法
- 摘要
- 函式程式設計
- 什麼是函式程式設計?
- 不變值
- 純函式
- 函式是值
- 函式錯誤處理
- 摘要
- 類型和類型系統
- 推論類型
- 泛型
- 交集類型
- 聯集類型
- 代數資料類型
- 變異性
- 不透明類型
- 結構類型
- 相依函數類型
- 其他類型
- 情境抽象
- 擴充方法
- 內容參數
- 內容界限
- 已提供匯入
- 類型類別
- 多重宇宙等價性
- 隱式轉換
- 摘要
- 並行處理
- Scala 工具
- 使用 sbt 建置和測試 Scala 專案
- 工作表
- 與 Java 互動
- 針對 Java 開發人員的 Scala
- 針對 JavaScript 開發人員的 Scala
- 針對 Python 開發人員的 Scala
- 下一步