For與Function進階實戰(zhàn)、Lazy的使用
10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先建設網(wǎng)站后付款的網(wǎng)站建設流程,更有烏達免費網(wǎng)站建設讓你可以放心的選擇與我們合作。一、for循環(huán)的進階實戰(zhàn)
Def main=(args:Array[String]):Unit{
For(i<- 1 to 3;j<- 3 to 8)
Println((100*i+j)+” ")
也可在for循環(huán)中加入條件表達式:
For(i<- 1 to 3;j<- 3 to 8 if i!=j)
Println((100*i+j)+”?。?
}
定義函數(shù)的時候一般函數(shù)都有值,函數(shù)可以作為函數(shù)的參數(shù)去賦值
def Adsds(x: int) =x+100
val add=(x: int) => x+200
二、Function的進階實戰(zhàn)
三、Lazy延遲加載和延遲執(zhí)行
1、For&Function進階
(1)For 使用
def main(args: Array[String]): Unit = { for (i <- 1 to 2; j <- 1 to 2 if i != j) //將1到2的集合每次循環(huán)賦值給i,將1到2的集合每次循環(huán)賦值給j,如果i!=j,就輸出當i=1,j=2結果為102,當i=2,j=1結果是201 println((100 * i + j) + " ")}
運行代碼得到如下結果:102 201
我們看到與Java不同的是,代碼i,j都沒有進行申明類型,它可以根據(jù)右側類型元素自動進行類型推導。類型推導是Scala中非常強大的一個內容。
(2)Function函數(shù)使用
函數(shù)有值是scala中的非常重要的特點,因為函數(shù)有值,函數(shù)執(zhí)行必然有結果,所以函數(shù)可以作為函數(shù)的參數(shù)去傳遞,這是一個非常重要的結論,這個結論導致了函數(shù)式編程很多重要的技巧。
def addA(x: Int) = x + 100
//定義函數(shù)addA,它的參數(shù)類型是整數(shù),因為函數(shù)有值,所以一般有=號,=號右側是函數(shù)計算過程println("The result from a function is :" + addA(2))
匿名函數(shù)-是函數(shù)最常見的一種形態(tài),因為Scala里只關注函數(shù)怎么做,不關注它的名字
def main(args: Array[String]): Unit = { val add = (x: Int) => x + 200 //將匿名函數(shù)的值賦值給常量add,=>是將接收的整數(shù)類型去加200 println("The result from a val is " + add(2)) }
函數(shù)返回值一般不指定,Scala會自動推導,但遞歸函數(shù)除外,因為遞歸函數(shù)并不知道上一次計算返回的什么樣的結果
//這里是求斐波那序列的值def main(args: Array[String]): Unit = { def fac(n:Int): Int = if (n <= 0) 1 else n * fac(n - 1) //這里可以看到返回類型是int,如果不指定會報錯 println("The result from a fac is : " + fac(10) )}
有默認參數(shù)的函數(shù)
//content參數(shù)被默認為I love Sparkdef main(args: Array[String]): Unit = { def combine(content: String, left: String = "[", right: String = "]") = left + content + right println("The result from a combine is : " + combine("I love Spark", "@", "@"))}
參數(shù)可變的函數(shù)
//通過*表示可以輸入多個參數(shù),即參數(shù)可變.這里將傳入的參數(shù)累加,賦值給resultdef main(args: Array[String]): Unit = { def connected(args: Int*) = { var result = 0 for(arg <- args) result += arg result } println("The result from a connected is : " + connected(1,2,3,4,5) ) println("The result from a connected is : " + connected(1,2,3,4,5,6) )}
2、lazy懶加載
如果在E盤下不存在test.txt, 使用 Source.fromFile()函數(shù)讀取文件,就會報錯拋出異常, 但是如果引用的變量或常量前加上 lazy,它只有在第一次被使用時,才被實例化,lazy會延遲執(zhí)行。當發(fā)生錯誤,但沒有立即被使用,程序還是OK,只有在被使用才會報錯,懶加載的意義在于延遲執(zhí)行,可以看到一個計算的更多步驟,優(yōu)化的范圍更大,優(yōu)化的力度也更大。
例如我們在java中,一個錯誤就可能讓我們的后邊的工作無法進行,而延遲執(zhí)行,可以放任這個錯誤,繼續(xù)后邊的工作,再從整體的邏輯里再去優(yōu)化解決這個錯誤,會更好。
import scala.io.Sourceobject Test { def main(args: Array[String]): Unit = { lazy val file = Source.fromFile("e:\\test.txt") println("Scala");// for (line <- file.getLines()) {// println(line);// } }}
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)站欄目:scala-04For與Function進階實戰(zhàn)、Lazy的使用-創(chuàng)新互聯(lián)
地址分享:http://www.rwnh.cn/article14/dgsode.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿建站、云服務器、網(wǎng)站設計公司、品牌網(wǎng)站設計、手機網(wǎng)站建設、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)