Scala表达式中if/else有值。
if (x > 0) 1 else -1
等同于C++中:x>0 ? 1 : -1
else 部分缺失,引入Unit类
,写成(),不带else的语句等同于:
if (x > 0) 1 else ()
这里Unit相当于C++中void。
Scala没有switch语句。
在REPL(Read-Eval-Print Loop)中输入代码块,可以键入:paste
,然后按Ctrl+D
结束。
Scala语言中行尾不需要分号,只要上下文能明确判断出终止即可。
要想在单行中写多个语句,就需要分号隔开。(不推荐使用)
if(n > 0) {r += 1; n += 1}
较长语句以不能用做语句结尾的符号结尾。
s = 4 + 3 * s0 - 8 + //这里的+号就告诉编译器,这不是行结尾
0.5 * 4.3 -2.3
{}
块包含一系列表达式,块的值就是最后一个表达式的值。
赋值语句块的值返回的是Unit类型
,写做()
。
x = y = 2 //不要这么做,y=2返回的是一个Unit类型
print
和println
不同之处是,println
多输出一个换行符。还有一个带有C风格格式化的printf
。
readLine
从控制台读入一行(唯一可以带一个参数作为提示符字符串),readInt、readDouble、readBoolean、readChar、readLong、readByte等都是用于输入。
while和do循环与C++相同。
for循环结构如下。
//1 to n返回数字1到n的一个区间
//让变量遍历<-右边的表达式所有值
for(i <- 1 to n)
r = r * i
until方法
,util方法返回一个并不包含上届的区间。 val s = "Hello"
var sum = 0
for(i <- 0 until s.length)//i的最后一个值为s.length-1
sum += s(i)
//上面等价于下面
for(ch <- "Hello") sum += ch
Scala没有提供break或continue
如果要用break可以使用下面三种方法:
for(i <- 1 to 3; j <- 1 to 3)
print(((i * 10) + j) + " ")
for(i <- 1 to 3; j <- 1 to 3 if i != j)
print(((i * 10) + j) + " ")
for循环中可以使用变量。
for推导式:for循环体以yeild
开始,会构造一个集合,每次迭代生成集合中的一个值。
for(i <- 1 to 3)
i % 3//最后生成Vector(1,2,0,1,2,0,1,2,0,1)
def fac(n : Int) = {//等号右边表达式的类型推出函数返回类型
var r = 1
for (i <- 1 to n) r = r * i
r//可以用return,但不常见
}
def fac(n : Int) : Int= {//等号右边表达式的类型推出函数返回类型
if (n <= 0)
1
else
n * fac(n - 1)
}
def f(str: String, left: String = "[", right: String = "]") = {
left + str + right
}
调用
f("Hello", right = "}") // 这里混合使用了未带名参数和带名参数
def sum(args: Int*) = {
var result = 0
for (arg <- args)
result += arg
result
val s = sum(1, 3, 8, 9)
val s = sum(1 to 5: _*)//要使用一个值得序列,把1 to 5当成一个序列必须追加:_*
def box(s: String) {
println("hello world" + s "\n")
}
等价于:
def box(s: String): Unit = {
println("hello world" + s "\n")
}
当val被声明为lazy
时,它的初始化将被推迟,直到我们首次取值。
lazy val words = "hello scala"
Scala异常工作机制跟Java和C++一样,抛出异常时,比如(throw表示式的类型为Nothing)。
throw new IllegalArgumentException("x should not be negative")
在if/else中,如果一个分支是Nothing类型,则if/else表达式的类型就是另一个分支的类型。
异常捕获用try/catch
或try/finally
或try/catch/finally
。
【待续】
内容来源于网络,如有侵权,请联系作者删除!