回顾:Case 类
Case 类是 Scala 处理复杂数据的理想方式。
比如表示 JSON 类型的数据,可以这样:
|
|
Case 类是 Scala 处理复杂数据的理想方式。
比如表示 JSON 类型的数据,可以这样:
|
|
Coursera: Principles of Reactive Programming.
项目 | 十年前 | 现在 |
---|---|---|
服务器节点 | 十几个 | 上千个 |
响应时间 | 几秒 | 几毫秒 |
维护当机时间 | 几小时 | 无 |
数据量 | GB | TB或PB |
Stream
想要找出从1000到10000间第二个素数,可以这样写:
|
|
这性能上很不好,只需要第二个素数,但找出了1000到10000的所有素数。
可以用流来改进它,流和列表类似,但是流只在需要时才会被求值。
Vector
列表是线性的,而向量是树形的,所以向量比列表有更平衡的访问时间(log32(n))。
向量和列表的定义方法类似:
|
|
我祈祷拥有一颗透明的心灵
和会流泪的眼睛
给我再去相信的勇气
越过谎言去拥抱你
每当我找不到存在的意义
每当我迷失在黑夜里
夜空中最亮的星
请照亮我前行
scaleList
:
|
|
|
|
大体上说,允许自身元素变化的类型不应该是协变的。
设C[T]
是一个参数化的类型,A
、B
类型满足A <: B
。总体上,C[A]
和C[B]
间有三种可能的关系:
C[A] <: C[B]
:C
是协变的C[A] >: C[B]
:C
是逆变(contravariant)的C[A]
和C[B]
互不是对方的子类型:C
是不变(nonvariant)的Scala中函数值确实被当做对象对待。
函数类型A => B
是类scala.Function1[A, B]
的缩写,像下面这样定义:
|
|
所以说函数是有apply
方法的对象。
还有Function2
、Function3
等等这些traits,可以有更多的参数(目前到22)。