scala學習筆記——操做符

 

 

中置操做符(二元操做符),操做符位於兩個參數之間。操做符包括字母,好比to,也能夠包括操做符字符,好比1->10,等同於方法調用1.->(10)數組

  a 標識符 bapp

  其中的標識符是一個帶有兩個參數的方法(一個隱式參數和一個顯式參數),例如:1 to 10,其實是一個方法調用1.to(10)函數

class Fraction(n: Int, d: Int) {
  val num: Int = n
  val den: Int = d
  //使用操做符的名稱來定義一個方法
  def *(other: Fraction) = new Fraction(num* other.num, den* other.den)
}

 

一元操做符,只有一個參數的操做符,分爲前置操做符(操做符出如今參數以前,包括+、-、!、~)和後置操做符(操做符出如今參數以後)spa

  a 標識符scala

  上述表達式等同於方法調用a.標識符()。例如:1 toString  等同於 1.toStringcode

 

賦值操做符的名稱形式爲操做符=,如下表達式
對象

  a 操做符= bblog

  等同於io

  a = a 操做符 btable

      例如 a += b 等同於 a = a+b

  注意:

  1)<=、>=和!=不是賦值運算符

  2)以=開頭的操做符不是賦值操做符(==、===、=/=等)

  3)若是a有一個名爲操做符=的方法,那麼該方法會被直接調用   

 

操做符優先級


  

  

 

  出如今同一行字符所產生的操做符相同優先級。

  

 

結合性

  

  

 

 

apply和update方法

scala容許以下的函數調用方法

  f(arg1,arg2,arg3,...)

擴展到能夠應用於函數外的值,若是f不是函數或方法,那麼這個表達式就等同於調用

  f.apply(arg1,arg2,arg3,...)

除非上述表達書出如今賦值語句的等號左側。表達式

  f(arg1,arg2,arg3,...) = value

對應以下調用

  f.update(arg1,arg2,arg3,...,value)

這個機制被應用於數組和映射,例如

 

import scala.collection.mutable
val scores = new mutable.HashMap[String,Int]()
scores("Bob") = 100 // 調用scores.update("Bob",100)
val bobsScore = scores("Bob") // 調用scores.apply("Bob")

 

  apply方法還常被應用到伴生對象中,用來構造對象而不用顯式的使用new。例如

class Fraction(n: Int, d: Int) {
  val num: Int = n
  val den: Int = d
  //使用操做符的名稱來定義一個方法
  def *(other: Fraction) = new Fraction(num* other.num, den* other.den)
}


object Fraction extends App{
  def apply(n: Int, d: Int) = new Fraction(n, d)
}

  有了這個apply方法,能夠直接用Fraction(3,4)來構造一個分數,而不是new Fraction(3,4)。這樣在須要大量的Fraction對象須要構造的時候,會很方便,例如

    val result = Fraction(3,4) * Fraction(2,5)

 

提取器

  所謂提取器,就是一個帶有unapply方法的對象,能夠把unapply當作是伴生對象中apply方法的反操做。apply方法接收構造參數,把它們變成對象。unapply接收一個對象,而後從中提取值——一般這些值就是當初構造對象的值。

相關文章
相關標籤/搜索