Scala基础应用(8)- 约束
来源:互联网 发布:js单选按钮选中 编辑:程序博客网 时间:2024/06/05 02:01
Scala基础应用(8)- 约束
1. 上下界 (<:, >:)
上界:A <: B, B为A的上界,即A必须为B的子类(含本类)
def test[A <: String, B] (str: A) (getStr: A => B) : B = getStr(str)val result = test("test1")( (x) => "my test string is " + x)
- 下界: A >: B, 与上界相反,A必须为B的超类 (含本类)
2. 视界 (<%)
视界与上界很类似,只是加入了隐式转换的支持
- 例子
def test [A <% B](param1: String, param2: Int ...): 返回类型 = ...等价于def test [A] (param1: String, param2: Int ...)(implicit viewAB: A => B) : 返回类型 = ...也等价于implicit def viewAB(a: A) : B = ...def test [A] (param1: String, param2: Int ...): 返回类型 = ...
类的视界
class A[T <% Int]
trait不支持视界
3. 广义类型约束符号 =:=, <:<, <%<
进一步对类型参数化的class或trait进行约束
如下声明方式为类型参数化的class或trait
case class Foo[A](参数列表) //这里A即为Foo类的参数化类型
- A =:= B, 表示证明A为该特定类型B, 不支持通过隐式转换成该特定类型, 即 A 必须是B类型
case class Foo[A](a:A) { def getLen(implicit str: A =:= String) = a.length}Foo("test string").getLen // 返回11Foo(123).getLen // 报错下面通过隐式转换也会报错import scala.language.implicitConversionsimplicit def int2String(n: Int) = n.toStringFoo(123).getLen //报错
- A <:< B 表示 A 必须是B的子类型
- A <%< B 表示 A 必须是可视化为B类型,可以通过隐式转换(类似于简单类型约束<%)
0 0
- Scala基础应用(8)- 约束
- Scala基础应用(1)- 基本语法
- Scala基础应用(3)- 特质
- Scala基础应用(2)- 类和对象
- Scala基础应用(4)- 样本类和模式匹配
- Scala基础应用(5)- 函数式编程
- Scala基础应用(6)- 常用对象,集合等
- Scala基础应用(7)- map/flatMap和filter
- Scala基础应用(9)- 隐式转换
- Scala基础应用(10)- 传值与传名参数
- Scala基础应用(11)- 懒加载(lazy语法糖)
- Scala学习(基础)
- Scala基础(草记)
- Scala基础入门(一)Scala 简介
- Scala 类型约束
- Scala深入浅出进阶经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析
- Scala坑一(基础)
- Scala基础(4):数组
- 位运算
- swift3自定义导航条(一)
- oracle创建表空间查看表报数据库未打开
- Scala基础应用(6)- 常用对象,集合等
- Scala基础应用(7)- map/flatMap和filter
- Scala基础应用(8)- 约束
- Scala基础应用(9)- 隐式转换
- Scala基础应用(10)- 传值与传名参数
- Scala基础应用(11)- 懒加载(lazy语法糖)
- Unity3D说明文档翻译-Creating Gameplay
- swift3自定义导航条(二)颜色处理
- 《Understanding the Linux kernel》学习笔记 Chapter 7: Process Scheduling
- 《深入理解java虚拟机》----读书笔记1
- Unity3D说明文档翻译-Scenes