scala基本类型和成员定义

类成员的类型取决于成员被引用的方式。主要有三个概念:
1. 类型 T 的基本类型集合
2. 从前缀类型 S 中可见的类 C 中的类型 T
3. 类型 T 的成员绑定集合
以下是这三个概念的详细定义
1. 类 T 的基本类型集合定义如下
 C 是类型 C 以及其父类型 T1,...,Tn 的基本类型,同时也是组合类型 T1
with  ...  with  T
n {R}的基本类型。
 类型别名的基本类型是别名的类型的基本类型
 抽象类型的基本类型是其上界的基本类型
 参数化类型 C[T1,...,Tn]的基本类型是类型 C 的基本类型, C 的每一个类
型参数 ai被对应的参数类型 Ti 代替
 单例类型 p. type  的基本类型是类型 p 的基本类型
 复合类型 T1  with  ...  with  Tn {R}的基本类型是所有 Ti 的基本类型的
缩减合并。意思是设合集 Φ 为 Ti 的基本类型的合集,如果 Φ 包括同一个类
的多个类型实例,比如 Si#C[Ti1,...,Tin](i∈I),那么所有的这些实例
将会被一个与其他一致的实例代替。如果没有这样一个实例存在就会导致错
误。 如果存在这样一个缩减合并,那么该集合会产生类类型的集合,不同的
类型是不同类的实例。
 类型选择 S#T 的基本类型如下确定:如果 T 是一个抽象类或别名,那么前面
的子句就会被应用。否则 T 必须是一个定义在某个类 B 中的(可能还是参数
化的)类类型。那么 S#T 的基本类型就是从前缀类型 S 中看到的 B 中 T 的基
本类型。
 既存类型 T  forSome  {Q}的基本类型是所有 S  forSome  {Q}类型, S 是
T 的基本类型
2. 从前缀类型 S 中可见的类 C 中的类型 T 只在以下条件下起作用,前缀类型 S 有一
个类型 C 的类型实例作为基本类型,即 S‟#C[T1,...,Tn]。我们有以下定义
 如果 S = ε. type ,那么从 S 看到的 C 中的 T 就是 T 本身
 否则,如果 S 是既存类型 S‟  forSome  {Q}, 从 S‟看 C 中的 T 将会是 T‟,
那么从 S 看 T 中的 C 将会是 T‟  forSome  {Q}
 否则,如果 T 是某类 D 的第 i 个类型参数,那么
 如果 S 有基本类型 D[U1,...,Un], [U1,...,Un]是类型参数,那么从
S 中看到的 C 中的 T 就是 Ui
 否则,如果 C 定义在类 C‟中,那么从 S 中看到的 C 中的 T 与在 S‟中看
到的 C‟中的 T 是一样的
 否则,如果 C 不是定义在其他类中,那么从 S 中看到的 C 中的 T 就是 T
本身
 否则,如果 T 是某类 D 的单例类型 D. this . type ,那么
 如果 D 是 C 的子类, S 的基本类型中有一个类 D 的类型实例,那么从 S
中看到的 C 中的 T 就是 S
类型
23
 否则,如果 C 定义在类 C‟中,那么从 S 中看到的 C 中的 T 与 S‟中看到
的 C‟中的 T 相同
 否则,如果 C 不是定义在其他类中,那么从 S 中看到的 C 中的 T 就是 T
本身
 如果 T 是其他类型,那么将在所有其类型组件中执行以上描述的映射
如果 T 是一个可能参数化的类类型, T 的类定义在某个类 D 中, S 是某前缀
类型,那么“从 S 中看到 T”就是“从 S 中看到 D 中的 T 的简写”。
3. 类型 T 的成员绑定集合是(1)T 的基本类型中存在某类的类型实例和 C 中 d‟的定
义或声明( d 是将 d‟中的类型 T‟替换为从 T 中看到的 C 中的 T‟得到的结果)等
绑定(2)类型修饰的绑定(§3.2.7)(如果有的话)。
类型映射 S#t 的定义就是 S 中类型 t 的成员绑定 dt。在此情况下,我们可以说
S#t 由 dt定义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值