怎么編寫Scala腳本實現(xiàn)循環(huán)與枚舉

這篇文章主要介紹“怎么編寫Scala腳本實現(xiàn)循環(huán)與枚舉”,在日常操作中,相信很多人在怎么編寫Scala腳本實現(xiàn)循環(huán)與枚舉問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么編寫Scala腳本實現(xiàn)循環(huán)與枚舉”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司是專業(yè)的魯?shù)榫W(wǎng)站建設(shè)公司,魯?shù)榻訂?提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行魯?shù)榫W(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

第四步:編寫一些Scala腳本

盡管Scala的設(shè)計目的是幫助程序員建造非常大規(guī)模的系統(tǒng),但它也能很好地縮小到做腳本的規(guī)模。腳本就是一種經(jīng)常會被執(zhí)行的放在文件中的句子序列。把以下代碼放在hello.scala文件中:

println("Hello, world, from a script!")

然后運行:

$ scala hello.scala

于是你又會得到另外的祝詞:

Hello, world, from a script!

通過Scala的名為args的數(shù)組可以獲得傳遞給Scala腳本的命令行參數(shù)。Scala里,數(shù)組以零開始,通過在括號里指定索引訪問一個元素。所以Scala里數(shù)組steps的***個元素是steps(0),不是像Java里的steps[0]。作為測試,輸入以下內(nèi)容到新文件helloarg.scala:

// 向***個參數(shù)打招呼

println("Hello, " + args(0) + "!")

然后運行:

println("Hello, " + args(0) + "!")

這條命令里,"planet"被作為命令行參數(shù)傳遞,并在腳本里作為args(0)被訪問。因此,你會看到:

Hello, planet!

注意這個腳本包括了一條注釋。Scala編譯器將忽略從//開始到行尾截止的以及在/*和*/之間的字符。本例還演示了String使用+操作符的連接。這與你的預(yù)期一樣。表達(dá)式"Hello, "+"world!"將產(chǎn)生字符串"Hello, world!"。

第五步:用while循環(huán);用if判斷

要嘗試while,在printargs.scala文件里輸入以下代碼:

var i = 0 while (i < args.length) {    println(args(i))    i += 1  }

注意

雖然本節(jié)的例子有助于解釋while循環(huán),但它們并未演示***的Scala風(fēng)格。在下一段中,你會看到避免用索引枚舉數(shù)組的更好的手段。

這個腳本開始于變量定義,var i = 0。類型推斷認(rèn)定i的類型是scala.Int,因為這是它的初始值的類型,0。下一行里的while結(jié)構(gòu)使得代碼塊(大括號之間的代碼)重復(fù)執(zhí)行直到布爾表達(dá)式i < args.length為假。args.length給出了args數(shù)組的長度。代碼塊包含兩句話,每個都縮進(jìn)兩個空格,這是Scala的推薦縮進(jìn)風(fēng)格。***句話,println(args(i)),輸出第i個命令行參數(shù)。第二句話,i += 1,讓i自增一。注意Java的++i和i++在Scala里不起作用,要在Scala里自增,必須寫成要么i = i + 1,或者i += 1。用下列命令運行這個腳本:

$ scala printargs.scala Scala is fun

你將看到:

Scala  is  fun

想要更好玩兒一些,就把下列代碼輸入到新文件echoargs.scala:

var i = 0 while (i < args.length) {   if (i != 0)    print(" ")   print(args(i))   i += 1  }  println()

在這個版本里,用print調(diào)用替代了println調(diào)用,這樣所有參數(shù)將被輸出在同一行里。為了更好的可閱讀性,你應(yīng)該用if(i != 0)檢查,除了***個之外的每個參數(shù)前插入一個空格。由于***次做while循環(huán)時i != 0會失敗,因此在頭一個參數(shù)之前不會輸出空格。***,你應(yīng)該在末尾多加一個println,這樣在輸出所有參數(shù)之后會有一個換行。這樣你的輸出就非常漂亮了。如果用下面的命令運行腳本:

$ scala echoargs.scala Scala is even more fun

就能得到:

Scala is even more fun

注意Scala和Java一樣,必須把while或if的布爾表達(dá)式放在括號里。(換句話說,就是不能像在Ruby里面那樣在Scala里這么寫:if i < 10。在Scala里必須寫成if (i < 10)。)另外一點與Java類似的,是如果代碼塊僅有一個句子,大括號就是可選的,就像echoargs.scala里面if句子演示的。并且盡管你沒有看到,Scala也和Java一樣使用分號分隔句子的,只是Scala里的分號經(jīng)常是可選的,從而可以釋放你的右小手指。如果你有點兒羅嗦的脾氣,那么就把echoargs.scala腳本寫成下面的樣子好了:

var i = 0;  while (i < args.length) {   if (i != 0) {    print(" ");   }   print(args(i));   i += 1;  }  println();

第六步:用foreach和for枚舉

盡管或許你沒意識到,在前一步里寫while循環(huán)的時候,你正在用指令式:imperative風(fēng)格編程。指令式風(fēng)格,是你常常使用像Java,C++和C這些語言里用的風(fēng)格,一次性發(fā)出一個指令式的命令,用循環(huán)去枚舉,并經(jīng)常改變共享在不同函數(shù)之間的狀態(tài)。Scala允許你指令式地編程,但隨著你對Scala的深入了解,你可能常會發(fā)現(xiàn)你自己在用一種更函數(shù)式:functional的風(fēng)格編程。實際上,本書的一個主要目的就是幫助你變得對函數(shù)式風(fēng)格感覺像和指令式風(fēng)格一樣舒適。

函數(shù)式語言的一個主要特征是,函數(shù)是***類結(jié)構(gòu),這在Scala里千真萬確。舉例來說,另一種(簡潔得多)打印每一個命令行參數(shù)的方法是:

args.foreach(arg => println(arg))

這行代碼中,你在args上調(diào)用foreach方法,并把它傳入函數(shù)。此例中,你傳入了帶有一個叫做arg參數(shù)的函數(shù)文本:function literal。函數(shù)體是println(arg)。如果你把上述代碼輸入到新文件pa.scala,并使用命令執(zhí)行:

$ scala pa.scala Concise is nice

你會看到:

Concise  is  nice

前例中,Scala解釋器推斷arg的類型是String,因為String是你調(diào)用foreach的那個數(shù)組的元素類型。如果你喜歡更顯式的,你可以加上類型名,不過如此的話你要把參數(shù)部分包裹在括號里(總之這是語法的普通形式):

args.foreach((arg: String) => println(arg))

運行這個腳本的結(jié)果與前一個相同。

如果你更喜歡簡潔的而不是顯式的風(fēng)格,就可以充分體會到Scala特別簡潔的優(yōu)越性。如果函數(shù)文本由帶一個參數(shù)的一句話組成,你都不需要顯式命名和指定參數(shù)。 這樣,下面的代碼同樣有效:

args.foreach(println)

總而言之,函數(shù)文本的語法就是,括號里的命名參數(shù)列表,右箭頭,然后是函數(shù)體。

現(xiàn)在,到這里你或許想知道那些你在指令式語言如Java或C里那么信任的for循環(huán)到哪里去了呢。為了努力引導(dǎo)你向函數(shù)式的方向,Scala里只有一個指令式for(稱為for表達(dá)式:expression)的函數(shù)式近似。目前你還看不到他們?nèi)康牧α亢捅磉_(dá)方式,直到你讀到了(或者先瞄一眼)第7.3節(jié),我們僅僅帶您在這里領(lǐng)略一下。創(chuàng)建一個新文件forargs.scala,輸入以下代碼:

for (arg <- args)   println(arg)

這個表達(dá)式里“for”之后的括號包含arg<-args。 <-右側(cè)的是熟悉的args數(shù)組。<-左側(cè)的是“arg”,val的名稱(不是var)。(因為總歸是val,你只要寫arg就可,不要寫成val arg。)盡管arg可能感覺像var,因為他在每次枚舉都會得到新的值,但它的確是val : arg不能在for表達(dá)式的函數(shù)體中重新賦值。取而代之,對每個args數(shù)組的元素,一個新的arg val將被創(chuàng)建并初始化為元素值,然后for的函數(shù)體將被執(zhí)行。

如果執(zhí)行forargs.scala腳本:

$ scala forargs.scala for arg in args

可以看到:

for  arg  in  args

Scala的for表達(dá)式可以比這個做得更多,但是這個例子足以讓你起步了。

到此,關(guān)于“怎么編寫Scala腳本實現(xiàn)循環(huán)與枚舉”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

名稱欄目:怎么編寫Scala腳本實現(xiàn)循環(huán)與枚舉
標(biāo)題鏈接:http://muchs.cn/article28/gdsdjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、面包屑導(dǎo)航、建站公司、虛擬主機、品牌網(wǎng)站制作、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司