從名稱可知“可擴展的語言”說明scala確實有它的強大之處-可擴展性,故scala應用範圍很廣,從簡單的腳本到構建大型系統。
scala增加的新類型
引入 BigInt類型(從scala.BigInt引入,其實它的來源是java的BigInteger)如下面的例子
def factorial(x:BigInt):BigInt= if(x==0) 1 else x*factorial(x-1) 調用時直接factorial(20)。
scala增加了新的控制結構
引入新的控制結構-actor--併發編程結構,actor是能夠實現線程模型上的併發抽象,可以通過彼此間傳遞消息來實現通信,actor可以執行兩種基本操作
消息的發送和接受。發送操作,用驚歎號表示,可以把消息發給actor.如下舉例
recipient !msg
發送是異步的,每個actor都有信箱(mailbox)把進入的消息排成隊列,actor通過receive代碼塊處理信箱中收到的消息
receive{
case Msg1=>..........相應的處理1
case Msg2=>.............相應的處理2
}
當信箱中有符合case 消息時將會相應的匹配並處理。
在這裏再舉一個scala的actor實現校驗和(cheksum)計算器服務的簡單例子:
actor {
var sum=0
loop{
receive{
case Data(bytes) =>sum+=hash(bytes)
case GetSum(requester) =>requester ! sum
}
}
}
這個actor首先定義一個名爲sum的本地變量,並賦初值0,然後就等待在消息循環中,不斷的用receive段接受消息,匹配處理
其中requester!sum把當前sum值發回給requester.requester字段嵌入在GetSum消息裏,它通常指向創建請求的actor.
是什麼讓scala有擴展性呢?
其實很簡單它是結合面向對象和函數式編程的特點,這些在後面的學習中會體現出它的特點。
scala又是高級的
val nameHasUpperCase=name.exists.(_.isUpperCase) 其中_是站位符,代碼看起來
scala是靜態類型的
什麼是靜態類型系統呢?其含義是你可以根據保存和計算的值的類型認定變量和表達式。如若感覺抽象可以參考http://blog.csdn.net/mycoolx/article/details/6082187
這一小節就簡單介紹一下scala的一些特性,具體內容見下章節