标签:scala操作符 提取器 scala update 优先级
变量名、函数名、类名等统称为标识符,scala可以使用任何字符来作标识符,比如 ()!#%&×+-/:<>=?@\^|~
等。
反引号中可以使用任何字符序列。
val √ = scala.math.sqrt _
√(2)
val `val` = 42
println(`val`)
操作符要接两个参数,分别位于操作符两边。
a 标识符 b
等价于 a.标识符(b)
。
1 to 10
等价于 1.to(10)
1 -> 10
等价于 1 .->(10)
只有一个参数的操作符成为一元操作符,操作符的位置可能位于参数的前或后,所有有下面两种情况。
a 标识符
等价于 a.标识符()
,标识符 a
等价于 a.unary_标识符
。
1 toString
等价于 1.toString()
val a = 42
-a
等价于 a.unary_-
操作符=
,表达式是 a 操作符= b
,等价于 a = a 操作符 b
。 a += 1
等价于 a = a + 1
<=、>=、!=、==、===、=/=
等不是赋值操作符,后置操作符优先级低于中置操作符,a 中置操作符 b 后置操作符
等价于 (a 中置操作符 b) 后置操作符
。
符号优先级如下表所示:
操作符 | 优先级 |
---|---|
除下面字符以外的操作符 | 1(最高) |
* / % | 2 |
+ - | 3 |
: | 4 |
< > | 5 |
!= | 6 |
& | 7 |
^ | 8 |
| | 9 |
赋值操作符 | 10(最低) |
// 构造列表List
1 :: 2 :: Nil // :: 右结合
1 :: (2 :: Nil)
(1 :: 2) :: Nil // 错误
2::Nil
等价于 Nil.::(2)
。 val scores = new scala.collection.mutable.HashMap[String, Int]
scores("Bob") = 100
等价于调用:scores.update("Bob", 100)
val bobsScore = scores("Bob")
等价于调用:scores.apply("Bob")
提取器:是一个带有unapply方法的对象,可以当做是伴生对象apply的方法的反操作。
unapply接受一个对象,从中提取值。
class Fraction(n: Int, d: Int) {
private val num: Int = if (d == 0) 1 else n;
private val den: Int = if (d == 0) 0 else d;
def *(other: Fraction) = new Fraction(num * other.num, den * other.den)
}
// unapply返回的就是构造该对象的两个值
object Fraction {
def apply(n: Int, d: Int) = new Fraction(n, d)
def unapply(input: Fraction) =
if (input.den == 0) None else Some((input.num, input.den))
}
object Main extends App {
var Fraction(a, b) = Fraction(3, 4) * Fraction(2, 5)
println(a)
println(b)
}
每个样例类都会自动具备apply方法和unapply方法,样例类后面章节会讲解,这里只要了解就可以。
提取器可以只测试输入而不真正将其值提取出来,只返回一个Boolean。
// Name 提取器可以产生所有组成部分的序列
// 关于 Option,Some,None后面章节会详细讲解,这里只需了解upapplySeq的作用就可以。
object Name {
def unapplySeq(input: String): Option[Seq[String]] =
if (input.trim == "") None else Some(input.trim.split("\\s+"))
}
【待续】
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:scala操作符 提取器 scala update 优先级
原文地址:http://blog.csdn.net/zcf1002797280/article/details/49847223