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

 上一章我们共同研究了for循环以及变种。这章我们围绕比较常用的几个其他控制语句学习。

 

首先,对for进行补充,  For-Comprehensions

格式: for (s ) yield e

举例:

1
2
3
var range = 0.until(10)
var = for (p <- range if p > 5yield p
println(m);

结果:

Vector(6, 7, 8, 9)

 

下面我们根据官方例子来先大家展示一下,格式如下:

1
2
3
4
//A simple for-comprehension
for (x <e) yield e’
//is translated to
e.map(x => e’)

意思就是说 for循环这种方式可以用于和map互换(如果你有java基础,应该知道map是什么)

首先,来看看具体官方例子:

1
for (p <persons if p.age > 20yield p.name

我们自己为他补全代码

1
2
3
4
5
6
7
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 > 1yield p.name
println(n2);

打印结果会是

1
List(a, b)

根据结果,我们得到了p.age大于1的 所有person的name.即p.name

这种方式,很类似一个

1
var persons  = Map(a -> 1, b -> 2, c -> 3)

通过键值对的方式取值。顺便学习下Map吧

1
2
3
4
var range1 = 1.until(4)
var m1  = Map(1 -> 242 -> 253 -> 26)
var = for (p <- range1 if p > 1yield m1(p)
println(n)

结果是

1
Vector(2526)

 

for语句还可以更复杂点

1
2
3
4
var =  for { i <- 0.until(10)
j <- 1.until(i)
if i+j>5yield (i, j)
println(m)

 

还可以更复杂点,但目前够用了。 大家要理解for,从上一章到这一章基本够用了。下面补充其他的常用控制语句。

一 while

1
2
3
while (true) {
//TODO do something
}

会死循环,切记慎用,还可以这样

1
2
do//DO SOMETHING}
while (true)

java程序员可能会犯的错误

1
2
3
var line = ""
while ((line = readLine()) != ""//记住scala不支持这种方式,line会得不到值
println("Read: "+ line)

 

二 match

1
2
3
4
5
6
7
var = 1;
var = 0;
a  match {
case 1 =>  i = 2
case 2 =>  i = 5
}
println(i);

参数a 可以用一个函数的返回值替换

1
2
3
4
5
6
7
8
9
10
11
def match_re : Int={
1
}
def match_1={
var = 0;
match_re  match {
case 1 =>  i = 2
println("i = 2");
case 2 =>  i = 5
println("i = 5");
}

这里我们看到特殊符号 => 再一次出现, 用于 case when

 

三 if else

1
2
3
4
5
6
7
8
var = 3
if(a>3){
println("3 success");
}else if(a>2){
println("2 success");
}else{
println("success");
}









本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1412807,如需转载请自行联系原作者
上一篇:DBHelper数据库操作类(二)


下一篇:日志服务告警使用与常见问题排查