僅限 Scala 3
用於類型時,&
算子會建立所謂的交集類型。A & B
類型表示同時為 A
類型和 B
類型的值。例如,以下範例使用交集類型 Resettable & Growable[String]
trait Resettable:
def reset(): Unit
trait Growable[A]:
def add(a: A): Unit
def f(x: Resettable & Growable[String]): Unit =
x.reset()
x.add("first")
在此範例中的方法 f
中,參數 x
必須同時是 Resettable
和 Growable[String]
。
交集型別 A & B
的成員是 A
的所有成員和 B
的所有成員。因此,如所示,Resettable & Growable[String]
具有成員方法 reset
和 add
。
交集型別可用於結構性地描述需求。也就是說,在我們的範例 f
中,我們直接表達我們滿意 x
的任何值,只要它是 Resettable
和 Growable
的子型別即可。我們沒有必要建立以下類似的名義輔助特質
trait Both[A] extends Resettable with Growable[A]
def f(x: Both[String]): Unit
trait Both[A] extends Resettable, Growable[A]
def f(x: Both[String]): Unit
定義 f
的兩種替代方案之間有一個重要的差異:雖然兩者都允許使用 Both
的實例來呼叫 f
,但只有前者允許傳遞 Resettable
和 Growable[String]
的子型別,但不是 Both[String]
的實例。
請注意,
&
是可交換的:A & B
的型別與B & A
相同。
此頁面的貢獻者
內容
- 簡介
- Scala 功能
- 為何選擇 Scala 3?
- Scala 體驗
- Hello, World!
- REPL
- 變數和資料類型
- 控制結構
- 網域建模
- 方法
- 一級函數
- 單例物件
- 集合
- 情境抽象
- 頂層定義
- 摘要
- 類型初探
- 字串內插
- 控制結構
- 網域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法功能
- Scala 3 中的 Main 方法
- 摘要
- 函數
- 匿名函數
- 函數變數
- Eta 展開
- 高階函數
- 撰寫自己的 map 方法
- 建立傳回函數的方法
- 摘要
- 封裝和匯入
- Scala 集合
- 集合類型
- 集合方法
- 摘要
- 函式程式設計
- 什麼是函式程式設計?
- 不可變值
- 純函數
- 函數是值
- 函式錯誤處理
- 摘要
- 類型和類型系統
- 推論類型
- 泛型
- 交集類型
- 聯合類型
- 代數資料類型
- 變異性
- 不透明類型
- 結構類型
- 相依函數類型
- 其他類型
- 情境抽象
- 擴充方法
- 情境參數
- 情境界限
- Given 匯入
- 類型類別
- 多重相等性
- 隱式轉換
- 摘要
- 並行處理
- Scala 工具
- 使用 sbt 建置和測試 Scala 專案
- 工作表
- 與 Java 互動
- Java 開發人員的 Scala
- JavaScript 開發人員的 Scala
- Python 開發人員的 Scala
- 後續步驟