Scala 3 — 书籍

交集类型

语言

仅限 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 同时ResettableGrowable[String]

交集类型 A & B成员A 的所有成员和 B 的所有成员。因此,如所示,Resettable & Growable[String] 具有成员方法 resetadd

相交类型可用于结构化地描述需求。也就是说,在我们的示例 f 中,我们直接表示,只要 xResettableGrowable 的子类型,我们就对 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,但只有前者允许传递 ResettableGrowable[String] 的子类型(但不是 Both[String] 的子类型)的实例。

请注意,&可交换的A & BB & A 类型相同。

此页面的贡献者