上一章我们共同研究了for循环以及变种。这章我们围绕比较常用的几个其他控制语句学习。
首先,对for进行补充, For-Comprehensions
格式: for (s ) yield e
举例:
1
2
3
|
var range = 0 .until( 10 )
var m = for (p <- range if p > 5 ) yield 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 > 20 ) yield p.name
|
我们自己为他补全代码
1
2
3
4
5
6
7
|
class person (name 1 : String, age 1 : Int) {
var age = age 1 ;
var name = name 1 ;
} var persons : List[person] = List( new person( "s" , 1 ), new person( "a" , 2 ), new person( "b" , 3 ));
var n 2 = for (p <- persons; if p.age > 1 ) yield p.name
println(n 2 );
|
打印结果会是
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 range 1 = 1 .until( 4 )
var m 1 = Map( 1 -> 24 , 2 -> 25 , 3 -> 26 )
var n = for (p <- range 1 if p > 1 ) yield m 1 (p)
println(n) |
结果是
1
|
Vector( 25 , 26 )
|
for语句还可以更复杂点
1
2
3
4
|
var m = for { i <- 0 .until( 10 )
j <- 1 .until(i)
if i+j> 5 } yield (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 a = 1 ;
var i = 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 i = 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 a = 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,如需转载请自行联系原作者