真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Scala學(xué)習(xí)筆記-創(chuàng)新互聯(lián)

1類型自動(dòng)匹配(模式匹配)

為豐縣等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及豐縣網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、豐縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

2函數(shù)是有值的(匿名函數(shù)是函數(shù)的常態(tài))

遞歸函數(shù)需要指定返回值

3.內(nèi)部類隸屬于外部類的實(shí)例本身,而java內(nèi)部類屬于外部類,對(duì)外部類的依賴路徑依賴

4.object類似于java中的靜態(tài)內(nèi)部類 里面的所有成員都是靜態(tài)的,適用于配置文件

靜態(tài)都是用來(lái)修飾類的內(nèi)部成員的。比如靜態(tài)方法、靜態(tài)成員變量。它唯一的作用就是隨著類的加載(而不是隨著對(duì)象的產(chǎn)生)而產(chǎn)生,以致可以用類名+靜態(tài)成員名直接獲得。這樣靜態(tài)內(nèi)部類就可以理解了,它可以直接被用 外部類名+內(nèi)部類名 獲得。

5.同名object是class的伴生對(duì)象,很多時(shí)候伴生對(duì)象是做為伴生類靜態(tài)成員的封裝區(qū)域

6.scala方法的最后一行是返回值無(wú)return

7.scala可變參數(shù)Int* java中 int... args

8.apply使用與單例

http://book.51cto.com/art/201408/449448.htm

9.接口trait(可以有非抽象方法)比 interface (只能有抽象方法) 功能強(qiáng)大很多 extends ..... with....with....

跟java一樣只能繼承一個(gè)trait或者class,如果還要繼承其他trait需要with(對(duì)象混入)

10. 包對(duì)象(package object) 包中所有類可以直接訪問(wèn)包對(duì)象的所有成員和方法

11scala包的隱式引用

import java.lang._

import scala._

import Predef._

12.映射符號(hào) => lambda表達(dá)式,表示一個(gè)匿名函數(shù)

13.占位符 _ placeholder 模式匹配代表字符串

14. 本地函數(shù) 在函數(shù)中定義的函數(shù),內(nèi)部函數(shù)屬于私有函數(shù),外部不可以訪問(wèn),實(shí)現(xiàn)高內(nèi)聚低耦合

15.偏函數(shù) _ 代表參數(shù) 編譯器根據(jù)sum _ (空格+下劃線)自動(dòng)產(chǎn)生類里的apply方法 傳遞部分參數(shù)變成另外一種函數(shù)

16.閉包 javascript支持 閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù),由于javascript的語(yǔ)言特性,如果你想讀取一個(gè)函數(shù)內(nèi)部的變量,那你本身也必須是這個(gè)函數(shù)內(nèi)部子函數(shù)。

17.高階函數(shù) map() 以函數(shù)作為參數(shù)

18.模式匹配提取器 Extrator

           match

                     case

                     case

模式匹配在具體數(shù)據(jù)類型的上的應(yīng)用

19.正則表達(dá)式后面帶個(gè).r

20.Scala的case class和pattern matching(模式匹配),這倆個(gè)兩個(gè)程序結(jié)構(gòu)對(duì)于處理樹結(jié)構(gòu)的數(shù)據(jù)非常有幫助。Scala的case class使得對(duì)對(duì)象進(jìn)行模式匹配變得非常方便,簡(jiǎn)單的來(lái)說(shuō),Scala的case class就是在普通的類定義前加case這個(gè)關(guān)鍵字,然后你可以對(duì)這些類來(lái)模式匹配。

成員默認(rèn)是val的,成員未顯式聲明var或者val的話,默認(rèn)是val(常量)

每個(gè)case class都會(huì)有伴生對(duì)象里面有apply方法

伴生對(duì)象會(huì)幫我們構(gòu)造出case class的具體對(duì)對(duì)象

unapply從已經(jīng)構(gòu)建出的對(duì)象中(case class or object)提取出內(nèi)容,而伴生對(duì)象的apply方法是構(gòu)建對(duì)象

21 構(gòu)造器的函數(shù)名為this,重載構(gòu)造器(附屬構(gòu)造器)必須要調(diào)用其他的附屬構(gòu)造器,其他的構(gòu)造器在最終形態(tài)上會(huì)調(diào)用主構(gòu)造器,scala函數(shù)若沒(méi)有參數(shù)省略小括號(hào),this()可以簡(jiǎn)寫成this

22. 別名 @符號(hào)可以引用匹配到的對(duì)象 index@"Flink"

23 sealed封閉  只能在當(dāng)前文件里頭被繼承,限制子類必須在同一個(gè)文件中

Option 的兩個(gè)子類 Some None

24.兩個(gè)::表示往List頭部添加元素,三個(gè):::組合List,List集合分為head(第一個(gè))和tail兩部分

val hadoop= new Hadoop ::Nil

25.拉鏈操作 zip

26.flatMap 集合map后合并多個(gè)集合

27.List更多操作 partition(分區(qū)) span find(第一個(gè)滿足條件的元素) takeWhile dropWhile

exists (有一個(gè)滿足返回true) forall (全部滿足返回true)

28.foldLeft foldRight從最左邊開始和最右邊開始 sortwith(_<_)排序操作

29. List.range(2,5)  半閉半開區(qū)間 List(2,3,4)不包括5

30.List.map2同時(shí)對(duì)兩個(gè)集合相應(yīng)元素操作

31.可變集合需要引入mutable包,默認(rèn)是不可變的集合

可變集合可以直接用+=和-=追加刪除元素,++=和--=追加刪除集合

32.HashMap非常高效的,對(duì)key進(jìn)行hashcode取值

33.treeMap,treeSet有序的

34.List[+A]協(xié)變

35. <- 提取符號(hào)(迭代器)

37. f 代表函數(shù)

38. Bounds 類型限定符號(hào)

                                        < : 上界  只能是子類

                                > : 下界  只能是父類

             更常用            < % 視圖界定 不是子類會(huì)隱式轉(zhuǎn)換 Int ->RichInt String->RichString

39. Ordered[T]對(duì)象可以用>或者<符號(hào)比較對(duì)象代替Comparable[T]的comapreTo方法

40. [T : Ordering] context bounds 上下文界定 存在一個(gè)類型為Ordering[T]的隱式值

  spark大量使用

41. [T : Manifest] 內(nèi)部自動(dòng)構(gòu)建Manifest類型的隱式參數(shù) implicit

     [T : ClassTag] 編譯時(shí)會(huì)自動(dòng)翻譯成隱式參數(shù)和隱式值

     虛擬機(jī)運(yùn)行時(shí)泛型是擦除的,不認(rèn)識(shí)泛型 ,必須給具體的類型

42. 理解即可 類型約束  A < : < B A必須是B的子類比< :更嚴(yán)格,編譯的時(shí)候就會(huì)去判斷類型

                      A=:=B A和B是同類型

43.  [+A] covariance(協(xié)變) [-A] contravariance(逆變)

如果一個(gè)類型支持協(xié)變或逆變,則稱這個(gè)類型為variance(翻譯為可變的或變型),否則稱為invariant(不可變的)

先說(shuō)說(shuō)協(xié)變和逆變(實(shí)際上還有非變)。協(xié)變和逆變主要是用來(lái)解決參數(shù)化類型的泛化問(wèn)題。由于參數(shù)化類型的參數(shù)(參數(shù)類型)是可變的,當(dāng)兩個(gè)參數(shù)化類型的參數(shù)是繼承關(guān)系(可泛化),那被參數(shù)化的類型是否也可以泛化呢?Java中這種情況下是不可泛化的,然而Scala提供了三個(gè)選擇,即協(xié)變、逆變和非變。下 面說(shuō)一下三種情況的含義,首先假設(shè)有參數(shù)化特征Queue,那它可以有如下三種定義。
1)trait Queue[T] {}
這是非變情況。這種情況下,當(dāng)類型S是類型A的子類型,則Queue[S]不可認(rèn)為是Queue[A]的子類型或父類型,這種情況是和Java一樣的。

2)trait Queue[+T] {}
這是協(xié)變情況。這種情況下,當(dāng)類型S是類型A的子類型,則Queue[S]也可以認(rèn)為是Queue[A}的子類型,即Queue[S]可以泛化為Queue[A]。也就是被參數(shù)化類型的泛化方向與參數(shù)類型的方向是一致的,所以稱為協(xié)變。

3)trait Queue[-T] {}
這是逆變情況。這種情況下,當(dāng)類型S是類型A的子類型,則Queue[A]反過(guò)來(lái)可以認(rèn)為是Queue[S}的子類型。也就是被參數(shù)化類型的泛化方向與參數(shù)類型的方向是相反的,所以稱為逆變。

44. 默認(rèn)情況下只要方法(函數(shù))是泛型的,它的參數(shù)是逆變的,返回值就是協(xié)變的

Scala規(guī)定,協(xié)變類型只能作為方法的返回類型,而逆變類型只能作為方法的參數(shù)類型。類比函數(shù)的行為,結(jié)合Liskov替換原則,就能發(fā)現(xiàn)這樣的規(guī)定是非常合理的。

里氏替換原則(Liskov Substitution Principle LSP)

     里氏替換原則是面向?qū)ο笤O(shè)計(jì)的基本原則之一。任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。LSP是繼承復(fù)用的基石,只有當(dāng)子類可以替換基類,軟件單位的功能不受影響時(shí),基類才能真正的被復(fù)用,而子類也可以在基類的基礎(chǔ)上增加新的行為。

       里氏替換原則通俗的來(lái)講就是:子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。它包含以下4層含義:

  • 子類可以實(shí)現(xiàn)父類的抽象方法,但不能覆蓋父類的非抽象方法。

  • 子類中可以增加自己特有的方法。

  • 當(dāng)子類的方法重載父類的方法時(shí),方法的前置條件(即方法的形參)要比父類方法的輸入?yún)?shù)更寬松。

  • 當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時(shí),方法的后置條件(即方法的返回值)要比父類更嚴(yán)格。

參考文章:

http://www.tuicool.com/articles/vaAnmq

45.this.type表示當(dāng)前對(duì)象(this)的類型,this指代當(dāng)前的對(duì)象。this.type被用于變量,函數(shù)參數(shù)和函數(shù)返回值的類型聲明,主要是在某些場(chǎng)合下加強(qiáng)類型約束,或者說(shuō)是為了確保類型的絕對(duì)安全,鏈?zhǔn)秸{(diào)用

46. type相當(dāng)于起個(gè)別名

47. spark很少使用 結(jié)構(gòu)類型 不想從類或者接口的角度限制它, 傳入的參數(shù)包含某種方法

48. 復(fù)合類型(extend ....with ....with.... )與結(jié)構(gòu)類型結(jié)合使用

49.infix type (中置類型) 中置表達(dá)式(右結(jié)合)  :> 代表函數(shù)名  中置類型:類型名稱寫在兩個(gè)參數(shù)中間,泛型的實(shí)例在類型的兩側(cè)

object :> {
    def unapply[A] (list: List[A]) = {
        Some( (list.init, list.last) )
    }
}

object Extractor_Advanced {

  def main(args: Array[String]) {
    (1 to 9).toList match{ case _ :> 9 => println("Hadoop") }
    (1 to 9).toList match{ case x :> 8 :> 9 => println("Spark") }
    (1 to 9).toList match{ case :>(:>(_,8),9) => println("Flink") }
    
  }

}

50.self type 自身類型 self => 給this實(shí)例指針起別名  內(nèi)部類引用非常方便 this:S1 =>自身類型實(shí)例約束必須混入S1

51.鴨子模型與動(dòng)態(tài)語(yǔ)言 不關(guān)注類型而關(guān)注方法與屬性

52.type抽象類型 與 類型參數(shù)(語(yǔ)法比較復(fù)雜)

type In=String

53.隱式轉(zhuǎn)換總結(jié)查找范圍為作用域或者伴生對(duì)象

我們需要某個(gè)類中特殊方法,但是這個(gè)類沒(méi)有提供這樣一個(gè)方法,所以我們需要隱式轉(zhuǎn)換成提供了這個(gè)方法的類,然后在調(diào)用這個(gè)方法

需要一個(gè)增強(qiáng)類,RichInt,RichFile

隱式轉(zhuǎn)換函數(shù) implicit def

54.隱式參數(shù):有個(gè)隱式default值

  參數(shù)顆?;?/p>

55.隱式類implicit class

56.隱式對(duì)象 implicit object

57.伴生對(duì)象隱式轉(zhuǎn)換不需要import

58.并發(fā)繼承Actor編程(Akka分布式并發(fā)消息驅(qū)動(dòng)框架) 覆寫def act(){ }

59.actor工具方法創(chuàng)建匿名Actor

  !發(fā)消息

   receive中代碼塊轉(zhuǎn)換成偏函數(shù),說(shuō)他是偏函數(shù)因?yàn)榉祷氐挠?jì)算結(jié)果有很多類型

60. 主線程當(dāng)作Actor使用 self.receive{}  main主線程接受其他線給主線程發(fā)送的消息

     self.receiveWithin() 指定超時(shí)時(shí)間不會(huì)一直阻塞

     sender ! 給發(fā)送者返回消息

     線程之間使用case class或者class object傳遞消息

61. react loop 線程重用  替代while(true) { recieve { } }的方式

62.scala swing編程覆寫top方法

63. listenTo(button) deafTo(button) 監(jiān)聽(tīng)和解除監(jiān)聽(tīng)

事件棧

   reactions +={

  case ButtonClicked(button)=>{

  }

 }

64.for循環(huán)中的模式匹配

 for其實(shí)調(diào)用的是foreach

for((k,v:Int) <-List(("spark"->5),("Hadoop"->"Big Data"))) { println(k)}

65.模式匹配中不能用大寫字母,大寫字母會(huì)被認(rèn)為是常量

   模式匹配編譯器是lazy級(jí)別的,不會(huì)報(bào)錯(cuò),運(yùn)行會(huì)報(bào)錯(cuò)

66.getClass實(shí)例  classOf 類型本身

  classOf [ ] 更高級(jí)別  typeOf[ ]更詳細(xì)級(jí)別

67.所有的對(duì)象都有一個(gè)唯一的.type的單例類型

   this.type構(gòu)成了鏈?zhǔn)奖磉_(dá)式返回的是動(dòng)態(tài)當(dāng)前實(shí)際運(yùn)行的實(shí)例

68.List的兩個(gè)子類 class ::和object Nil(空)

69.外在的函數(shù)式和內(nèi)部的可變性是非常精妙的組合

70.for表達(dá)式的生成器、定義器、過(guò)濾器

 71.play框架

72.for循環(huán)取代map,flatmap,filter

73.akka的Actor是樹狀結(jié)構(gòu)( 分層)的共享一些公共信息

 actor有路徑 akka://HelloAkka/user/master

子Actor路徑

  akka://HelloAkka/user/master/map

akka://HelloAkka/user/master/reduce

74.SBT專為scala設(shè)計(jì)的構(gòu)建工程 交互式命令操作 安裝SBT插件

75.事件驅(qū)動(dòng)的編程模型 消息郵箱

   preStart postStop preReStart

 ActorSystem ActorRef(actor的引用)

 創(chuàng)建actor的過(guò)程伴隨actor的啟動(dòng),創(chuàng)建完可以直接發(fā)消息

76.Actor的構(gòu)造器 默認(rèn)的 傳入類名  非默認(rèn)的傳入其他actor從而發(fā)消息

77. akka中消息的發(fā)送方式 (都是異步的)

  1.Fire and Forget 不等待對(duì)方返回結(jié)果 java:tell,scala:!

  2.Send and Receive        java:ask scala:?  future

  主線程也屬于一個(gè)actor 在/temp路徑下

78.deadletters 消息接受actor死亡

  forward轉(zhuǎn)發(fā)會(huì)攜帶原始sender

79.停止Actor

shutdown()停止ActorSystem

 master!PoisonPill (藥丸) 異步的

 master!kill 同步的

 context.stop(self) 異步的

80.monitoring Actor

  watch unwatch

81.動(dòng)態(tài)切換actor的處理邏輯

 become unbecome

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享題目:Scala學(xué)習(xí)筆記-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/cojces.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部