目录
摘要
操作符与方法,缩写形式,相等性,自增长,标示符,apply,update,unapply
操作符
语法
Scala 中的操作符与 Java 类似
但是区别在由于 Scala 中一切皆是对象,所以这些操作符实际上是方法
var answer = 1 + 2
answer = 1.+(2) //+为方法名
当方法只有一个参数或无参时,Scala 可以对方法进行缩写,省略括号和点
a.method(b)
b.method()
缩写为
a method b
b.method
b method
相等性
在 Scala 中 ==
等效于 equals
,这一点和 Java 不同。
自增长
Scala 没有 ++
和 --
操作符,需要使用 +=1
和 -=1
来实现同样的效果。
counter += 1
标识符 Identifier
- 函数,变量,类等名称统称为标识符。
- Scala 中可以使用各种 Unicode 符号作为标识符,如 (!, #) 等
对于保留字,还可以使用反引号包含几乎任何字符
val `val` = 32
中置操作符 Infix Operator
中置操作符是二元操作符,操作符放在参数当中
中置操作符实际是方法的调用
基本格式为
a 操作符 b
1 to 10
1.to(10)
1 -> 10
1.->(10)
1 + 10
1.+(10)
一元操作符
基本格式为
后置操作符
a 操作符
或
前置操作符
操作符 a
-1
1.unary_
apply 和 update
apply
f(arg1,arg2...)
当 f
不是函数或方法时,会自动调用 f.apply(arg1,arg2...)
update
f(arg1,arg2...) = value
当 f
不是函数或方法时,会自动调用 f.update(arg1,arg2...value)
apply
常用在伴生对象中用于隐式构造对象
class ApplyExample(var x: Int, var y: Int) {
override def toString: String = x + "+" + y
}
object ApplyExample {
def apply(x: Int, y: Int) = new ApplyExample(x, y)
}
// 隐式调用 apply 方法
val obj = ApplyExample(1, 2)
// 隐式调用 update 方法
ApplyExample(2, 3) = 4 //(2,3,4)
apply 和 update 也常被用在数组或映射中
val scores = new mutable.HashMap[String, Int]()
scores("Bob") = 100 //actually invoke scores.update("Bob,100)
val bob = scores("Bob") //actually invoke scores.apply("Bob")
unapply 提取器
unapply
提取器主要用在模式匹配中,从一个对象中提取值unapply
的返回值是Option
,也可以使用其子类Some
- Scala 的正则表达式自带抽取器,可以抽取出一个 List。List 里的元素是匹配 “()” 里的表达式。
class ApplyExample(var x: Int, var y: Int) {
}
object ApplyExample {
def apply(x: Int, y: Int) = new OperatorExample(x, y)
def unapply(input: OperatorExample) = {
if (input.x < 0)
None
else
Some(input.x * 10, input.y * 10)
}
}
val obj = ApplyExample(1, 2)
val result = obj match {
case OperatorExample(1, 2) => "one"
case OperatorExample(a, b) => a + "," + b
case _ => "other"
}
println(result) //10,20