仅限 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
的子类型,我们就对 x
的任何值感到满意。我们不必创建以下类似的名义辅助特征
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
- 你好,世界!
- REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 一等函数
- 单例对象
- 集合
- 上下文抽象
- 顶级定义
- 总结
- 初识类型
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特性
- Scala 3 中的主方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 展开
- 高阶函数
- 编写自己的 map 方法
- 创建返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数是值
- 函数式错误处理
- 总结
- 类型和类型系统
- 推断类型
- 泛型
- 交集类型
- 联合类型
- 代数数据类型
- 协变
- 不透明类型
- 结构类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- 上下文参数
- 上下文边界
- 给定导入
- 类型类
- 多重相等
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- 工作表
- 与 Java 交互
- 面向 Java 开发人员的 Scala
- 面向 JavaScript 开发人员的 Scala
- 面向 Python 开发人员的 Scala
- 下一步