关键词:

类型与功能绑定、类型指定、访问控制。

类型约束的本质:

1、是否强制指定具有某些特征的类型;看类型构造器的定义本身是否对类型有约束;

2、访问控制:类型构造器的功能分为通用功能和约束功能;

通用功能任何实例类型都能访问;

约束功能,只有符合约束的构造实例能够访问。

类型与算法(功能)绑定;对引用类型施加约束,实质上是对构造类型开放了一批底层的功能接口;

类型构造器可以在这些功能接口基础上添加吸纳的功能。

一、术语

类型构造器:含有泛型和关联类型的类型声明定义为类型构造器(kind),或者高阶类型(scala)

引用类型:类型构造器所引用的可指定类型;

实例类型:指定了类型构造器中泛指类型的类型;

约束修饰的访问控制:

只有符合约束的构造实例能够访问(变量和功能);

定制功能:

类型构造器在引用类型的类型约束基础上扩展出来的新功能;

Now that we have a type constructor we can think of several different kinds of them, classified by how many type parameters they take. The simplest – like List[_] – that take a single param have the kind:(* -> *)

https://en.wikipedia.org/wiki/Kind_(type_theory)

二、泛型(关联类型)的运算

1、类型指定;

2、类型约束;

类型约束的潜台词是:被约束类型是泛型或可指定类型;

在swift中只有泛型类型和关联类型能参与类型约束;

类型约束是在类型指定以后检查约束表达式是否合法;

类型指定和类型约束及类型约束检查都是编译器行为;

类型约束只是一个进行合法性检查的表达式,表达式的评估在所有的待定类型指定以后进行。

三、类型约束的形式

1、无约束:按照泛型模式含义,类型构造器的缺省实现是类型无关的,是数据组织和算法的通用部分;

2、固有约束:声明关联类型时附带了约束:

1)指定类型时需要满足类型约束的要求;

2)可以称之为类型约束构,约束为固有属性;可以在此约束基础上扩展出更多的通用功能;

3、通用扩展约束

在约束的基础上扩展了新的功能;新的功能都受到约束的控制。

约束作用于整个构造类型;

符合约束的构造实例才能访问约束修饰的功能。

4、单个功能约束

类型约束作用于单个功能上,

符合约束的构造实例才能访问。

四、约束的作用范围

1、构造器本身对引用的类型有约束:

这个是最强约束,构造实例必须指定符合约束的类型;全局有效;

2、附加约束(扩展约束):构造器的扩展整体对引用类型做了约束;

不符合约束的实例能够访问通用功能;

符合约束的构造类型能够访问本扩展的所有功能;

3、局部约束:

约束作用于单个功能上;

访问控制与上面类似;

五、类型约束的意义

类型与算法是绑定的,对类型做了约束,相当于给构造类型提供了更多的可用功能进行扩展。

每一个(一类)类型都有建立在之上的算法;类型和算法密切相关,每一个类型都有绑定在该类型之上的算法;

对泛型的类型进行指定或约束,意味着该泛型的类型相关性,意味着可以使用关联在该类型相关算法;

这样,类型构造器就能使用关联的该类型上的算法进行定向扩展;

扩展出来的新的功能,泛型和协议具体实现时指定的类型满足约束条件的实现使用;

指定的类型满足约束,可以使用建立在该约束上的功能扩展;

六、总结

构造类型决定了通用功能;

构造类型和引用类型共同决定了扩展功能;

构造类型本身决定了通用功能的访问;

构造类型和引用类型及约束决定了定制功能的访问;

swift的类型约束的更多相关文章

  1. swift 泛型的类型约束

    总结: 1.类型约束只能添加到泛型参量上面 2.关联类型是泛型参量: 3.关联类型可以通过 协议.关联类型名称的形式引用: func allItemsMatch<C1: Container, C ...

  2. 浅谈Swift集合类型

    Swift 的集合表现形式由数组和字典组成.它可以完美的存储任何呢想存储的东西. 数组是一个同类型的序列化列表集合,它用来存储相同类型的不同值.字典也是一个数组,但它的存值方式类似于Map,通过一对一 ...

  3. Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  4. Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  5. C# 零散知识 扩展方法 类型约束

    今天看到这么一段代码,我看下面调用了NotifyPropertyChanged定义了两个参数,但是调用的时候只写了一个参数.后来查了下,原来这个是扩展方法的用法, 就是说给T扩展了一个方法Notify ...

  6. php的类型约束

    //如下面的类 class MyClass { /** * 测试函数 * 第一个参数必须为 OtherClass 类的一个对象 */ public function test(OtherClass $ ...

  7. Swift数字类型之间的转换

    Swift数字类型之间的转换Swift是一种安全的语言,对于类型的检查非常严格,不同类型之间不能随便转换.一.整型之间的转换在C和Objective-C等其他语言中,整型之间有两种转换方法:从小范围数 ...

  8. c# in depth之泛型的类型约束详细

    类型约束 1.引用类型约束 这种约束(表示成T:class,必须是为类型参数指定的第一个约束)用于确保使用的类型实参是引用类型,这可能是任何类,接口,数组,委托或者已知是引用类型的另一个类型参数. 例 ...

  9. swift 可选类型笔记

    晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧.广州下雨,真特么的冷..好了,废话不说了,说正题说说Swift可选类型. 先定义一个变量: var string ...

随机推荐

  1. C# WinForm 关于窗体最大化时的是否全屏效果与是否遮盖任务栏

    0.新建窗体 及添加按钮 1.  执行如下按钮事件  private void btnFormMax_Click(object sender, EventArgs e)  {     if (this ...

  2. LINQ 图解 LINQ学习第三篇

    LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作 ...

  3. smtp的host地址

    SMTP是SIMPLE MAIL TRANSFER PROTOCOL的缩写,一般的发信软件,如Outlook Express.FoxMail.Eudora都是使用这个协议进行发信的.SMTP Host ...

  4. SQL Server ——用 join on 连接多个表

    select * from table1 inner join table2 on table1.id=table2.id 其实 INNER JOIN ……ON的语法格式可以概括为: FROM ((( ...

  5. JUC源码阅读参考文章

    (飞哥)http://brokendreams.iteye.com/blog/2252081 (熊猫)http://blog.csdn.net/xiaoxufox/article/details/51 ...

  6. java的锁机制——synchronized

    一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个线 ...

  7. 批量导出VBA工程中的Source

    在做Excel宏相关项目的开发和维护过程中,我们经常需要导出VBA中的Source,但是Excel提供的宏编辑器中只能一个文件一个文件地导出,很不方便. 下面介绍2种批量导出的方法: 1.Source ...

  8. python 历险记(六)— python 对正则表达式的使用(上篇)

    目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...

  9. linux上SVN服务器搭建后windows无法连接到服务器

    忙了一天,linux搭建svn服务器,搭建好后windows一直无法连接,总觉得自己对: 原因: 1.以后禁止用sublime在本地编辑好后用XFTP上传到服务器(这样会导致文件权限问题,不能替换成功 ...

  10. 排序算法(1)--Insert Sorting--插入排序[1]--straight insertion sort--直接插入排序

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.基本思想 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成 ...