今天继续学习Scala,练手。

1. 一个数字如果是正数,则它的signum为1,如果为负数,则它的signum为-1,如果是0,则它的signum为0。编写一个函数计算该值。
Ans:

def sig_num(x: Double) = {
   if (x.signum == 1) x + "是正数"
   else if (x.signum == -1) x + "是负数"
   else "这个数是0"
}

println(sig_num(0))
println(sig_num(3))
println(sig_num(-2.8))

结果:

D:\dev\scala>scala sig_num.scala
这个数是0
3.0是正数
-2.8是负数

Scala没有三元运算符“?:”,没有switch语句,Scala的“if/else”语句很强大,最大特点是有值,就是“if/else”后面表达式的值。

2. 一个空的块表达式{}的值是什么?类型是什么?
Ans:
值为(),类型为Unit。Unit相当于Java的void,()是个值,表示“无有用值”。
结果:

scala> val b = {}
b: Unit = ()

3. Scala中,何种情况下,赋值语句x = y = 1是合法的?
Ans:
在Scala中,赋值语句本身的值是Unit类型的,所以,在以下情况下x = y = 1才是合法的(x是相应的Unit类型),同时,x和y必须是var声明。

scala> var x= ()
x: Unit = ()

scala> var y = 1
y: Int = 1

scala> x = y = 1
x: Unit = ()

4. 针对下列Java循环写一个Scala版:

for (int i = 10; i >= 0; i--) System.out.println(i);

Ans:

scala> for (i <- 0 to 10) println(10 - i)
scala> for (i <- 0 to 10; from = 10 - i) println(from)

以上两种方法都可以。
结果:

10
9
8
7
6
5
4
3
2
1
0

5. 编写一个过程countdown(n: Int),打印从n到0的数字
Ans:

def countdown(n: Int) {
   for (i <- 0 to n; from = n - i) print(from + " ")
}

结果:

scala> countdown(6)
6 5 4 3 2 1 0

enter image description here