为了更清楚地说明当前作用域中的 given 来自何处,我们使用一种特殊形式的 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 或扩展之外的所有定义都导入作用域,而 given
选择器将所有 given 定义—包括由扩展而来的定义—导入作用域。
这些规则有两个主要优点:
- 更清楚当前作用域内 given 的来源。 特别是,在一长串其他通配符导入中无法隐藏导入的 given 。
- 它可以导入所有 given ,而无需导入任何其他内容。 这很重要,因为 given 是可以匿名的,因此通常使用命名导入是不切实际的。
“导入 given”语法的更多示例见 package 和 import 章节。
Contributors to this page:
Contents
- 导言
- Scala 3 特性
- 为什么是 Scala 3 ?
- Scala 的味道
- Hello, World!
- The REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 头等函数
- 单例对象
- 集合
- 上下文抽象
- 顶层定义
- 总结
- 类型初探
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 领域建模
- 函数式领域建模
- 方法
- 方法特性
- main 方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 扩展
- 高阶函数
- 自定义 map 函数
- 创建可以返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数是值
- 函数式错误处理
- 总结
- 类型和类型系统
- 类型推断
- 泛型
- 相交类型
- 联合类型
- 代数数据类型
- 型变
- 不透明类型
- 结构化类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- Given 实例和 Using 语句
- 上下文绑定
- Given 导入
- 实现类型类
- 多元相等性
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- worksheet
- 与 Java 交互
- 向 Java 开发者介绍Scala
- Scala for JavaScript Developers
- Scala for Python Developers
- 下一步去哪