scala类型系统:16) 函数类型
2016-11-15 23:00
155 查看
scala类型系统:16) 函数类型
函数类型在写法上(T1,T2…) => R
小括号里的是入参类型(最多可以有22个,最少为0),右箭头右边的是返回结果类型。
函数类型里可以使用通配符“_”,表示任意类型:
scala> val x: String => _ = null x: Function1[String, _] = null
右箭头形式的背后是转换成
FunctionN[T1,T2…, R](N对应0~22),有点要注意的是,
FunctionN在对其类型参数的定义,入参类型都是逆变的,而结果类型是协变的。它反映了函数类型也是具有多态特性的,参考这篇:scala中函数类型的多态,这里再补充一下温悦在ATA上对这篇blog的评论,他的这张图很好:
有2个函数: f1, f2; 我们若能说f2是f1的子类,当且仅当:f2的定义域类型x2 “大于” f1的定义域类型x1,且f2的值域y2 “小于” f1的值域y1; 其中“大于”指“是父类”;“小于”指“是子类”;
进一步讲,f1(父类函数)能接受的任意参数,f2也能接受,且经由f2映射而得出的结果的类型,也一定在经由f1映射所得结果的类型的“范围内”(是其子类)
再进一步讲:当代码里有对f1的调用“f1(x)”时,你可以尽管将这里的f1换成f2而不会出现类型错误,这也就是关乎“函数类型”的“里氏替换原则(LSP)”
转载自:http://hongjiang.info/scala/ 推荐大家阅读下这位大哥出版的书《Scala函数式编程》
相关文章推荐
- SQL 10 函数 3 日期时间函数 - 2 主流数据库系统中日期时间类型的表示方式
- oracle的学习六:pl/sql基础(数据类型、定义变量)、游标、过程、函数、包、触发器(系统触发器)
- Scala函数---既存类型
- 【Scala类型系统】函数式Queue的简易实现
- 【Scala类型系统】类型参数化和变化型注解
- 日期类型格式化系统函数。
- scala类型系统:19) Manifest与TypeTag
- 2016 第四讲 Scala模式匹配、类型系统彻底精通与Spark源码阅读
- c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参
- 【Scala类型系统】自身类型(self type)引用
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- Scala in depth 6 Scala的类型系统 上
- 关于stat函数和根据st_mode 的值获取目标文件的文件类型和用户权限,及对相关系统宏的一点想法
- 第4集:Scala模式匹配、类型系统彻底精通与Spark源码阅读
- Scala讲座:类型系统和相关功能
- Scala的类型系统支持鸭子类型
- 工作总结日志<三> 数控系统RTLinux内核上几个系统类型和函数在RTAI内核上的对应
- Scala in depth 6 Scala的类型系统 下
- day4-Scala模式匹配、类型系统
- dword与dword_ptr类型的区别及64位系统下调用系统函数直接崩溃的问题