上一章我们共同研究了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,如需转载请自行联系原作者