上一章咱們共同研究了for循環以及變種。這章咱們圍繞比較經常使用的幾個其餘控制語句學習。java
首先,對for進行補充, For-Comprehensions程序員
格式: for (s ) yield eide
舉例:函數
var range = 0.until(10) var m = for (p <- range if p > 5) yield p println(m);
結果:學習
Vector(6, 7, 8, 9)spa
下面咱們根據官方例子來先你們展現一下,格式以下:scala
//A simple for-comprehension for (x <e) yield e’ //is translated to e.map(x => e’)
意思就是說 for循環這種方式能夠用於和map互換(若是你有java基礎,應該知道map是什麼)it
首先,來看看具體官方例子:io
for (p <persons if p.age > 20) yield p.name
咱們本身爲他補全代碼for循環
class person (name1:String, age1 : Int) { var age = age1; var name = name1; } var persons : List[person] = List(new person("s",1),new person("a",2),new person("b",3)); var n2 = for (p <- persons;if p.age > 1) yield p.name println(n2);
打印結果會是
List(a, b)
根據結果,咱們獲得了p.age大於1的 全部person的name.即p.name
這種方式,很相似一個
var persons = Map(a -> 1, b -> 2, c -> 3)
經過鍵值對的方式取值。順便學習下Map吧
var range1 = 1.until(4) var m1 = Map(1 -> 24, 2 -> 25, 3 -> 26) var n = for (p <- range1 if p > 1) yield m1(p) println(n)
結果是
Vector(25, 26)
for語句還能夠更復雜點
var m = for { i <- 0.until(10) j <- 1.until(i) if i+j>5} yield (i, j) println(m)
還能夠更復雜點,但目前夠用了。 你們要理解for,從上一章到這一章基本夠用了。下面補充其餘的經常使用控制語句。
一 while
while (true) { //TODO do something }
會死循環,切記慎用,還能夠這樣
do{ //DO SOMETHING} while (true)
java程序員可能會犯的錯誤
var line = "" while ((line = readLine()) != "") //記住scala不支持這種方式,line會得不到值 println("Read: "+ line)
二 match
var a = 1; var i = 0; a match { case 1 => i = 2 case 2 => i = 5 } println(i);
參數a 能夠用一個函數的返回值替換
def match_re : Int={ 1 } def match_1={ var i = 0; match_re match { case 1 => i = 2 println("i = 2"); case 2 => i = 5 println("i = 5"); }
這裏咱們看到特殊符號 => 再一次出現, 用於 case when
三 if else
var a = 3 if(a>3){ println("3 success"); }else if(a>2){ println("2 success"); }else{ println("success"); }