Scala学习笔记 A2/L1篇 - 操作符Operators

2018-08-10  本文已影响0人  hakase_nano

教材:快学Scala

chapter 11. 操作符 Operators

11.1 标识符:变量/函数/类等的名称

val 半径 = 3
val π = 3.1415926
val 周长 = 2 * π * 半径
周长: Double = 18.849555600000002

infix操作符 a 标识符 b 等价于 a.标识符(b) (左结合的情况)
postfix操作符 a 标识符 等价于 a.标识符()
prefix操作符 标识符a 等价于 a.unary_标识符()
赋值操作符 a 操作符= b 等价于 a = a 操作符 b
定义操作符 def *(other: Fraction) = new Fraction(num * other.num, den * other.den)

11.7 apply和update方法

如果f不是函数也不是方法,则
f(x1, x2) 等价于 f.apply(x1, x2)
f(x1, x2) = value 等价于 f.update(x1, x2, value)
e.g. HashMap用到了apply和update

val scores = new scala.collection.mutable.HashMap[String, Int]
scores("Bob") = 100 // scores.update("Bob", 100)
val bs = scores("Bob") // scores.apply("Bob")
class Fraction(n: Int, d: Int) {...}
object Fraction {
    def apply(n: Int, d: Int) = new Fraction(n, d)
}
val res = Fraction(3, 4) * Fraction(2, 5)

11.8 提取器 == 带unapply方法的对象

class Fraction(n: Int, d: Int) {...}
object Fraction {
    def unapply(input: Fraction) = 
        if (input.den == 0) None else Some((input.num, input.den))
}
val Fraction(a, b) = Fraction(3, 4) * Fraction(2, 5) // a = 6, b = 20
object Name {
    def unapply(input: String) = {
        val pos = input.indexOf(" ")
        if (pos == -1) None 
        else Some((input.substring(0, pos), input.substring(pos+1)))
    }
}
val author = "Cay Horstmann"
val Name(first, last) = author
上一篇下一篇

猜你喜欢

热点阅读