日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
十二步學會Scala(2):Scala的循環(huán)和數組

AlanWu在上一篇《十二步學會Scala(1)》中介紹了Scala的變量定義和方法定義,這一篇將進行第五到第八步,介紹循環(huán)和數組。

創(chuàng)新互聯是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網站建設公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的十余年時間我們累計服務了上千家以及全國政企客戶,如廣告制作等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質量監(jiān)控加上過硬的技術實力獲得客戶的一致稱譽。

原文地址:AlanWu的博客 | 編輯推薦:Scala編程語言專題

第五步:運行腳本

Scala是一個動態(tài)性很強的語言,所以它也像Ruby那樣,能夠寫腳本運行。

新建一個hello.scala的文本文件:

 
 
 
 
  1. println("Hello, world, from a script!"

打開命令行,并到達hello.scala所在的目錄:

 
 
 
 
  1. D:\>scala hello.scala  
  2. Hello, world, from a script!  
  3.  
  4. D:\>  

可以看到很簡單,就運行了這個腳本。

第六步: 循環(huán)用while, 判斷用if

Scala中使用while和java差不多。

寫個把輸入的參數字符逐個打印出來的小腳本,printargs.scala

 
 
 
 
  1. var i = 0 
  2. while (i < args.length) {  
  3. println(args(i))  
  4. i += 1 

這段腳本會把傳入的參數逐個打印出來。

while循環(huán)體外定義一個可變的變量i,在循環(huán)體內每次加一,直到傳入的參數全部打印完畢。

cmd

 
 
 
 
  1. D:\>scala printargs.scala Scala is fun  
  2. Scala  
  3. is  
  4. fun  
  5.  
  6. D:\>  

注意,Scala中不能用i++或++i

if在***篇的max方法中演示過了,不再重復。

第七步:用foreach和for進行迭代

上面介紹了用while做循環(huán),用過ruby或者喜歡java5新特性的人可能會說,hey,做個循環(huán)怎么這么丑?

ruby,java5有foreach,Scala當然也有!

接著上面的需求,用foreach實現把傳入的參數打印出來。

建個文本文件,叫pa.scala,里面寫上

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

運行pa.scala你會看到

cmd

 
 
 
 
  1. D:\>scala pa.scala Scala is easy  
  2. Scala  
  3. is  
  4. easy  
  5.  
  6. D:\>  

arg是迭代變量,不需要手工賦值,編譯器會把傳遞給它。同時編譯器會認出arg的類型,所以這里不需要定義類型。

但我覺得如果類型不是一目了然的情況下,***是定義一下類型,可以使閱讀代碼的人很輕松。

把arg定義上類型

pa.scala

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

注意當給變量定義類型的時候,必須要加括號!

這里傳給foreach的實際上就是一個匿名方法!

匿名方法的定義是這樣的:

方法參數 => 方法體

我們這個傳入的匿名方法就是: (arg: String) => println(arg)

很懶的程序員會發(fā)現,這里arg好像沒什么必要,唯一參數傳給唯一的方法體。在java這樣的想法可能是空幻想,但Scala幫你實現了!

我們可以省略成:

pa.scala

 
 
 
 
  1. args.foreach(println) 

就這么少!

Scala還有一個for迭代,可以做更多的事情,但這里只介紹一下它的簡單用法。

在ruby中實現上面的打印參數:

 
 
 
 
  1. for arg in ARGV # Remember, this is Ruby, not Scala  
  2. puts arg  
  3. end 

用Scala的for來實現

 
 
 
 
  1. for (arg <- args)  
  2. println(arg) 

感覺怎么樣?這里左箭頭<-可以讀成in。

在Scala,如果一句話是一行,可以省略分號;如果多個語句放在一行,用分號隔開。

第八步: 數組

數組是定義數據類型很重要很基礎的容器。在Scala里如何使用數組呢?這次我們的參數由程序定義,并把他們打印出來。

建個文本文件,叫paramswithvalues.scala

 
 
 
 
  1. val greetStrings = new Array[String](3)  
  2.  
  3. greetStrings(0) = "Hello" 
  4. greetStrings(1) = ", " 
  5. greetStrings(2) = "world!\n" 
  6.  
  7. for (i <- 0 to 2)  
  8. print(greetStrings(i))  

這里出現了很多Scala的新式武器!

1. 定義數組類型

Scala代碼

 
 
 
 
  1. val greetStrings = new Array[String](3)   

val已經介紹過了,表示greetStrings不能再被賦值。

這里Array[String]表示類型,可以讀成字符串的數組,它是一個類型,也就是類,所以可以用new去實例化。

括號3表示數組容量是3

2. 數組元素賦值

Scala代碼

 
 
 
 
  1. greetStrings(0) = "Hello"  

雖然greetStrings是不可更改的,但數字元素可以。

Scala用小括號代替java的中括號,可能很多java工程師會說:呵,發(fā)明新輪子。

其實Scala是被冤枉的。

Scala里所以東西都是對象,數組也不例外。數組賦值其實也是一個方法完成的。

上面的代碼會被編譯器轉換成兩個參數的方法:

Scala代碼

 
 
 
 
  1. greetStrings.update(0"Hello")   

當然你也直接這樣寫上面的賦值:

Scala代碼

 
 
 
 
  1. greetStrings.update(0"Hello")    
  2. greetStrings.update(1", ")    
  3. greetStrings.update(2"world!\n")   

3. 數組元素讀取

在for循環(huán)體里面有

Scala代碼

 
 
 
 
  1. print(greetStrings(i))   

為什么Scala不用中括號呢?是因為Scala有一套通用規(guī)則,會把小括號轉換成apply。

所以編譯器會得到這樣的代碼:

Scala代碼

 
 
 
 
  1. print(greetStrings.apply(i))   

很魔術?其實只要知道Scala的一些通用規(guī)則,很多符號就變得非常簡單易懂了。

如果不使用符號,我們的代碼同樣可以完成:

Scala代碼

 
 
 
 
  1. val greetStrings = new Array[String](3)    
  2.     
  3. greetStrings.update(0"Hello")    
  4. greetStrings.update(1", ")    
  5. greetStrings.update(2"world!\n")    
  6.     
  7. for (i <- 0.to(2))    
  8.   print(greetStrings.apply(i))   

這里for循環(huán)用了0 to 2,很容易理解,就是從0到2,默認步進1.

當方法參數只有一個的時候,可以不寫括號和點,

所以***循環(huán)是這樣寫就夠了:

Scala代碼

 
 
 
 
  1. for (i <- 0 to 2)   

to是0的一個方法,

Scala代碼

 
 
 
 
  1. for (i <- 0.to(2))    

數組就基本介紹到這里。接下來一篇將介紹集合類。


分享標題:十二步學會Scala(2):Scala的循環(huán)和數組
本文網址:http://www.5511xx.com/article/ccsesch.html