1. 程式人生 > >Scala迴圈之for、foreach

Scala迴圈之for、foreach

前一節我們簡單說明了scala中的while的迴圈,現在說說scala中的foreach遍歷。

scala中的for和foreach和java中的一樣的。現在我們簡單實用一下:

1.建立一個scala的指令碼,例如:scala-for-foreach.scala,指令碼中的程式碼如下:

args.foreach(arg => println(arg)) 利用foreach進行遍歷

我們執行這個指令碼

C:\Users\xuanyi>scala D:/scala/scala-script/scala-for-foreach.scala scala is goo
d tony

執行結果為:

scala
is
good
tony

這個只是簡單的使用,我們可以將上面的程式碼改變為:

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

arg :String:說明arg中元素的型別為String的型別

因此我們呼叫方法(function)的使用可以這樣使用

(x:Int,y:Int) =>  x + y

(x:Int,y:Int):代表方法的傳遞引數

x + y:表示方法體

總而言之,函式文字的語法是一個命名引數列表,在括號中是一個右箭頭,然後是函式的主體。

現在,這一點您可能想知道發生了什麼你已經習慣了那些可靠的迴圈使用命令式語言比如Java或c .為了引導你在功能方向,只有一個功能相對必要的(稱為表示式)在Scala中可用。

我們現在使用for迴圈的方式:

for(arg <- args){
  print(arg + " ");
}

我們將以上的程式碼,加到上面指令碼檔案中的後面,儲存執行,執行的結果:

scala
is
good
tony
scala is good tony

我們看for和java中的不一樣,這是scala中獨有的for迴圈。

for迴圈在array中的使用:

var greetStrings = new Array[String](3)
greetStrings(0) = "Hello "
greetStrings(1) = ", "
greetStrings(2) = "world"
for(i <- 0 to 2)
  print(greetStrings(i))

建立一個長度為3的字串陣列,使用for進行遍歷,列印每一項的值。

我們制定greetStrings可以制定相關的型別,如下:

var greetStrings:Array[String] = new Array[String](3)

這裡要注意,scala中的陣列下標和java一樣從零開始,但是java取值的時候用[ index ],和scala不同的是scala用(index).

for(i <-0 to 2)
  print(greetStrings(i))

如果一個方法只接受一個引數,那麼可以不帶點或括號呼叫它。這個例子中的to實際上是一個只接受一個Int引數的方法。程式碼0到2被轉換為方法呼叫(0).to(2)。注意,只有顯式指定方法呼叫的接收方時,這種語法才有效。

此示例說明的另一個重要想法將為您提供見解為什麼在Scala中使用括號訪問陣列的原因。 Scala的數量更少特殊情況比Java。 陣列就像任何其他類一樣只是類的例項Scala中的類。 在圍繞一個或多個值應用括號時對於變數,Scala會將程式碼轉換為方法的呼叫命名適用於該變數。 所以greetStrings(i)變成了greetStrings.apply(i)中。 因此,在Scala中訪問陣列的元素只是一個方法呼叫就像任何其他方法。 這個原則不僅限於此陣列:物件在括號中的某些引數的任何應用都將轉換為apply方法呼叫。 當然這隻會編譯如果該型別的物件實際上定義了一個apply方法.

所以當執行1+2的時候,在scala中是這樣的,(1).+(2)的形式執行的。

類似地,當對一個變數進行賦值時,應用括號和一個或多個引數,編譯器將把該賦值轉換為對update方法的呼叫,該方法將括號中的引數和等號右側的物件一併呼叫

greetStrings(0) = "Hello " 執行的方式為greetStrings.update(0,"hello")

println(greetStrings(0))  運行當時為greetStrings.apply(0)

我們可以這樣宣告一個數組:

val numNames = Array("one","two","four")

也可以這樣宣告

val numNames = Array.apply("one","two","four")

這裡是呼叫scala Array的工程方法apply進行宣告,建立並返回一個新的陣列。