scala基本类型和成员定义怎么理解
这篇文章主要讲解了"scala基本类型和成员定义怎么理解",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"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定义。
感谢各位的阅读,以上就是"scala基本类型和成员定义怎么理解"的内容了,经过本文的学习后,相信大家对scala基本类型和成员定义怎么理解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!