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

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

Scala對象的示例分析

這篇文章主要介紹Scala對象的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,白城企業(yè)網(wǎng)站建設,白城品牌網(wǎng)站建設,網(wǎng)站定制,白城網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,白城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

Scala作為一個純面向?qū)ο蟮恼Z言,于是在Scala中萬物皆對象,包括數(shù)字和函數(shù)。在這方面,Scala于Java存在很大不同:Java區(qū)分原生類型(比如boolean和int)和引用類型,并且不能把函數(shù)當初變量操縱。

1 數(shù)字和對象

由于數(shù)字本身就是對象,所以他們也有方法。事實上我們平時使用的算數(shù)表達式(如下例)

1 + 2 * 3 / x

是由方法調(diào)用組成的。它等效于下面的表達式,我們在上一節(jié)見過這個描述。

(1).+(((2).*(3))./(x))

這也意味著 +,-,*,/在Scala中也是有效的名稱。

在第二個表達式中的這些括號是必須的,因為Scala的分詞器使用最長規(guī)則來進行分詞。所以他會把下面的表達式:

1.+(2)

理解成表達項 1. ,+,和2的組合。這樣的組合結果是由于1.是一個有效的表達項并且比表達項1要長,表達項1.會被當作1.0 ,使得它成為一個double而不是int。而下面的表達式阻止了分析器錯誤的理解

(1).+(2)

2 函數(shù)與對象

函數(shù)在Scala語言里面也是一個對象,也許這對于Java程序員來說這比較令人驚訝。于是吧函數(shù)作為參數(shù)進行傳遞、把它們存貯在變量中、或者當作另一個函數(shù)的返回值都是可能的。吧函數(shù)當成值進行操作是函數(shù)型編程語言的基石。

為了解釋為什么吧函數(shù)當作值進行操作是十分有用的,我們來考慮一個計時器函數(shù)。這個函數(shù)的目的是每隔一段時間就執(zhí)行某些操作。那么如何吧我們要做的操作傳入計時器呢?于是我們想吧他當作一個函數(shù)。這種目前的函數(shù)對于經(jīng)常進行用戶界面編程的程序員來說是最熟悉的:注冊一個回調(diào)函數(shù)以便在事件發(fā)生后得到通知。

在下面的程序中,計時器函數(shù)被叫做oncePerSceond,它接受一個回調(diào)函數(shù)作為參數(shù)。這種函數(shù)的類型被寫作 () => Unit ,他們不接受任何參數(shù)也沒有任何返回(Unit關鍵字類似于C/C++中的void)。程序的主函數(shù)調(diào)用計時器并傳遞一個打印某個句子的函數(shù)作為回調(diào)。換句話說,這個程序永無止境的每秒打印一個“time flies like an arrow”。

objectTimer{
     def oncePerSecond(callback:()=>Unit){
             while(true){ callback();Thread sleep1000}
     }
     def timeFlies(){
              println("time flies like an arrow...")
     }
     def main(args:Array[String]){
              oncePerSecond(timeFlies)
     }
}

注意,我們輸出字符串時使用了一個預定義的函數(shù)println而不是使用System.out中的那個。

2.1 匿名函數(shù)

我們可以吧這個程序改的更加易于理解。首先我們發(fā)現(xiàn)定義函數(shù)timeFlies的***目的就是當作傳給oncePerSecond的參數(shù)。這么看來給這種只用一次的函數(shù)命名似乎沒有什么太大的必要,事實上我們可以在用到這個函數(shù)的時候再定義它。這些可以通過匿名函數(shù)在Scala中實現(xiàn),匿名函數(shù)顧名思義就是沒有名字的函數(shù)。我們在新版的程序中將會使用一個匿名函數(shù)來代替原來的timeFlise函數(shù),程序看起來像這樣:

objectTimerAnonymous{
     def oncePerSecond(callback:()=>Unit){
             while(true){ callback();Thread sleep1000}
     }
     def main(args:Array[String]){
              oncePerSecond(()=>
                      println("time flies like an arrow..."))
     }
}

本例中的匿名函數(shù)使用了一個箭頭(=>)吧他的參數(shù)列表和代碼分開。在這里參數(shù)列表是空的,所以我們在右箭頭的左邊寫上了一對空括號。函數(shù)體內(nèi)容與上面的timeFlise是相同的。

以上是“Scala對象的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當前題目:Scala對象的示例分析
當前URL:http://weahome.cn/article/gocppd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部