Scala 3 — 书籍

给定导入

语言
此文档页面特定于 Scala 3,并且可能涵盖 Scala 2 中不可用的新概念。除非另有说明,本页中的所有代码示例均假定你使用的是 Scala 3。

为了更清楚地了解当前作用域中的给定值来自何处,import 语句的特殊形式用于导入 given 实例。基本形式在此示例中显示

object A:
  class TC
  given tc: TC = ???
  def f(using TC) = ???

object B:
  import A.*       // import all non-given members
  import A.given   // import the given instance

在此代码中,对象 Bimport A.* 子句导入 A 的所有成员,除了 given 实例 tc。相反,第二个导入 import A.given 导入该 given 实例。这两个 import 子句也可以合并为一个

object B:
  import A.{given, *}

讨论

通配符选择器 * 将除给定值或扩展之外的所有定义引入范围,而 given 选择器将所有给定值(包括扩展产生的给定值)引入范围。

这些规则有两个主要好处

  • 更清楚当前范围内的给定值来自何处。特别是,不可能在其他通配符导入的长列表中隐藏导入的给定值。
  • 它允许导入所有给定值而不导入其他任何内容。这很重要,因为给定值可以是匿名的,因此通常使用命名导入不切实际。

“import given” 语法的更多示例显示在 打包和导入章节 中。

此页面的贡献者