此文档页面特定于 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
在此代码中,对象 B
的 import A.*
子句导入 A
的所有成员,除了 given
实例 tc
。相反,第二个导入 import A.given
仅导入该 given
实例。这两个 import
子句也可以合并为一个
object B:
import A.{given, *}
讨论
通配符选择器 *
将除给定值或扩展之外的所有定义引入范围,而 given
选择器将所有给定值(包括扩展产生的给定值)引入范围。
这些规则有两个主要好处
- 更清楚当前范围内的给定值来自何处。特别是,不可能在其他通配符导入的长列表中隐藏导入的给定值。
- 它允许导入所有给定值而不导入其他任何内容。这很重要,因为给定值可以是匿名的,因此通常使用命名导入不切实际。
“import given” 语法的更多示例显示在 打包和导入章节 中。
此页面的贡献者
内容
- 简介
- Scala 特性
- 为什么选择 Scala 3?
- Scala 简介
- Hello, World!
- REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 一等函数
- 单例对象
- 集合
- 上下文抽象
- 顶级定义
- 总结
- 类型初探
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特性
- Scala 3 中的主方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 展开
- 高阶函数
- 编写自己的 map 方法
- 创建返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数即值
- 函数式错误处理
- 总结
- 类型和类型系统
- 推断类型
- 泛型
- 相交类型
- 联合类型
- 代数数据类型
- 变体
- 不透明类型
- 结构类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- 上下文参数
- 上下文边界
- 给定导入
- 类型类
- 多重相等
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- 工作表
- 与 Java 交互
- 面向 Java 开发人员的 Scala
- 面向 JavaScript 开发人员的 Scala
- 面向 Python 开发人员的 Scala
- 下一步