Classes
类是用于创建具有相同字段和方法的对象的模板.
类定义语法:
class Name(parameter: type, ...) {
declarationOrExpression ...
}
或:
class Name(val parameter: type, ...) {
declarationOrExpression ...
}
- Name是类名
- parameter是类构造参数名
- type是构造参数类型
- 可选的declarationOrExpression是声明或表达式
Objects and Functions
Scala中,如果一个对象拥有一个apply方法,该对象可以向函数一样进行调用.
class Adder(amount: Int) {
def apply(in: Int): Int = in + amount
}
val add3 = new Adder(3)
// add3: Adder = Adder@1d4f0fb4
add3(2) // shorthand for add3.apply(2)
// res: Int = 5
Companion Objects
Scala中使用单例对象实现Java中的静态方法.
class Timestamp(val seconds: Long)
object Timestamp {
def apply(hours: Int, minutes: Int, seconds: Int): Timestamp =
new Timestamp(hours*60*60 + minutes*60 + seconds)
}
Timestamp(1, 1, 1).seconds // res: Long = 3661
伴生对象声明语法:
class Name {
...
}
object Name {
...
}
Case Classes
Case Class的特性:
- 不再需要在构造参数中定义参数为val
- 默认提供的toString方法
- 智能的equal,操作与对象字段值得hashCode方法
- copy方法:使用当前对象已有字段值创建新的对象
Case Object
如果定义case class时不需要构造参数,就可以把它定义成一个case object.
两者的不同:
- case object 同时定义了一个class和object,object作为该class唯一一个实例.
- 同时拥有case class的特性
Pattern Matching
模式匹配声明语法:
expr0 match {
case pattern1 => expr1
case pattern2 => expr2
...
}
- expr0将绑定表达式的结果
- pattern1,pattern2等待适用于匹配的模式,并且按照罗列顺序
- expr1,expr2是匹配后进行求值的表达式