溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

scala

發(fā)布時(shí)間:2020-07-06 02:35:57 來源:網(wǎng)絡(luò) 閱讀:235 作者:afeiye 欄目:大數(shù)據(jù)

模式匹配

  1. 在jdk1.7之前,Java的 switch 關(guān)鍵字只可以處理原生類型(int 、short 、byte 、char)和枚舉類型。在jdk1.7以后,switch新增了對(duì)String類型的處理。
    scala的模式匹配則可以處理各種復(fù)雜的類型以及場(chǎng)景。
  2. 常量匹配、變量匹配、列表和元組匹配
    scala
    在最后一行指令中_是一個(gè)通配符,它保證了我們可以處理所有的情況。否則當(dāng)傳進(jìn)一個(gè)不能被匹配的值的時(shí)候,你將獲得一個(gè)運(yùn)行時(shí)錯(cuò)誤。
    Nil是一個(gè)空的List,定義為List[Nothing]。
    scala
    scala
  3. 類型匹配
    scala
    case 子句支持"或"邏輯,使用|即可;

閉包

閉包是一個(gè)函數(shù),返回值依賴于聲明在函數(shù)外部的一個(gè)或多個(gè)變量。
閉包通常來講可以簡(jiǎn)單的認(rèn)為是可以訪問一個(gè)函數(shù)里面局部變量的另外一個(gè)函數(shù)。
比如函數(shù):val multiplier = (i:Int) => i * factor;factor不是形式參數(shù),而是自由變量;這樣定義的函數(shù)變量 multiplier 成為一個(gè)"閉包",因?yàn)樗玫胶瘮?shù)外面定義的變量,定義這個(gè)函數(shù)的過程是將這個(gè)自由變量捕獲而構(gòu)成一個(gè)封閉的函數(shù)。
scala

柯里化函數(shù)

將原來接受兩個(gè)參數(shù)的函數(shù)變成新的接受一個(gè)參數(shù)的函數(shù)的過程。新的函數(shù)返回一個(gè)以原有第二個(gè)參數(shù)為參數(shù)的函數(shù)。
def sum(x:Int,y:Int)=x+y,柯里化之后就是def sum(x:Int)(y:Int) = x + y。
這個(gè)函數(shù)是什么意思呢? 接收一個(gè)x為參數(shù),返回一個(gè)匿名函數(shù),該匿名函數(shù)的定義是:接收一個(gè)Int型參數(shù)y,函數(shù)體為x+y

偏函數(shù)與偏應(yīng)用函數(shù)

偏函數(shù)不是函數(shù),Scala中的Partia Function是一個(gè)Trait,其的類型為PartialFunction[A,B],其中接收一個(gè)類型為A的參數(shù),返回一個(gè)類型為B的結(jié)果。scala
偏函數(shù)內(nèi)部有一些方法,比如isDefinedAt、OrElse、 andThen、applyOrElse

  1. isDefinedAt:判斷傳入的參數(shù)是否在處理范圍內(nèi)scala
  2. orElse : 將多個(gè)偏函數(shù)組合起來使用,效果類似case語句。scala
  3. andThen: 相當(dāng)于方法的連續(xù)調(diào)用,比如g(f(x))。scala
  4. applyOrElse:它接收2個(gè)參數(shù),第一個(gè)是調(diào)用的參數(shù),第二個(gè)是個(gè)回調(diào)函數(shù)。如果第一個(gè)調(diào)用的參數(shù)匹配,返回匹配的值,否則調(diào)用回調(diào)函數(shù)。
    scala

偏應(yīng)用函數(shù),是指一個(gè)函數(shù)有n個(gè)參數(shù), 而我們?yōu)槠涮峁┥儆趎個(gè)參數(shù), 那就得到了一個(gè)部分應(yīng)用函數(shù)。
scala

object與class

scala 中沒有 static 關(guān)鍵字
所以 對(duì)于一個(gè)class來說,所有的方法和成員變量在實(shí)例被 new 出來之前都是無法訪問的;
scala object 中所有成員變量和方法默認(rèn)都是 static 的;
所以只有object中的main方法是可以直接訪問的。

scala中集合

map定義:var verMap = Map[String, String]()
map添加元素:verMap += (mapKey -> categeryName)
list定義:var listNewValue: List[String] = List()
list添加元素:listNewValue :+= mulValue

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI