美文网首页
Scala学习笔记 A2/L1篇 - 操作符Operators

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

作者: hakase_nano | 来源:发表于2018-08-10 18:27 被阅读0次

    教材:快学Scala

    chapter 11. 操作符 Operators

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

    • 操作符字符:除.,;'"之外所有ASCII字符+Unicode字符
    val 半径 = 3
    val π = 3.1415926
    val 周长 = 2 * π * 半径
    周长: Double = 18.849555600000002
    
    • 反引号``可用于访问Java内与关键字同名的方法:Thread.`yield`()

    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)

    • 除赋值操作符外,操作符的优先级取决于首字符
    • 除了:结尾的和赋值操作符外,操作符的结合性都是左结合
      e.g. 用于构造列表的::操作符是右结合的
      1 :: 2 :: Nil 意思是 1 :: (2 :: Nil)
      2 :: Nil 等价于 Nil.::(2)

    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")
    
    • apply一大用途:定义在companion object里用来构造对象而不用显式new对象
    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方法的对象

    • apply:接受构造参数,然后变成对象
    • unapply:接受一个对象,然后从中提取值,返回一个Option
    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
    
    • 每一个case class都自动具备apply和unapply方法

    相关文章

      网友评论

          本文标题:Scala学习笔记 A2/L1篇 - 操作符Operators

          本文链接:https://www.haomeiwen.com/subject/meslbftx.html