【scala初學】scala 控制 for while match if

   上一章咱們共同研究了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");
}
相關文章
相關標籤/搜索