2012-10-10 73 views
1

使用while構造函數編寫以下代碼的替代方法是什麼?在Scala中將循環轉換爲while循環

val list = List(1,2,3)        
for (v <- list) println(v) 
+1

這不是一個'for'循環,這是一個'for'理解。它只是'list.foreach {v => println(v)}'的語法糖,這會更習慣性地寫成'list foreach println'。這是清楚明白的。 –

+2

Scala中的編程第23.4節爲'for(x < - expr1)body'「for loops」調用表達式「;本質上它們是副作用的,並且具有類型Unit,就像一個while循環一樣。有一本「收益」條款,這本書稱它爲「表達」。術語「理解」在詞彙表中被列爲for表達的另一個名稱,但不用於其他地方。 –

+0

哎喲,你想把它轉換成while循環嗎?這可能是for循環所擅長的一些典型例子。 –

回答

3

一種可能必須遍歷:

var current = list 
while(!current.isEmpty) { 
    println(current.head) 
    current = current.tail 
} 
+0

我相信這種方法不好,因爲它需要修改'current'? – Howard

+0

@霍華德 - 好吧,這就是你使用while循環時所得到的結果。雖然循環本質上是變異的構造(或者除了加熱CPU之外,它們毫無意義)。 –

+0

使用迭代器的想法基本相同。它只是封裝了var。上面的循環僅適用於列表,旨在顯示迭代如何在列表中工作。迭代器會將其抽象出來,這當然是一件好事。 –

0
val list = List(1,2,3) 
var i = 0 
while (i < list.length) { 
    println(list(i)) 
    i += 1 
} 
+0

這不是一個好方法,因爲調用'length'需要遍歷整個列表,並且通過索引訪問元素n需要遍歷n個元素。 –

5
val list = List(1,2,3) 
val iter = list.iterator 
while (iter.hasNext) println(iter.next())