块表达式: val distance = { val dx = x - x0; val dy = y - y0; sqrt(dx * dx + dy * dy) } 取最后一个表达式
循环:
1.
while(n > 0) {
r = r * n
n -= 1
}
2.
for(i <- 1 to n)
r = r * i
3.
val s = "Hello"
var sum = 0
for(i <- 0 until s.length)
sum += s(i)
注:to包含上限,until不包含上限
函数
def fac(n: Int) = {
var r = 1
for (i <- 1 to n) r = r * i
r
}
除了递归之外,其他不用指定返回类型。但是对于递归函数,如果没有返回类型,Scala编译器会报错
def fac(n: Int): Int = if(n <= 0) 1 else n * fac(n-1)
_*序列化:(1 to 5: _*) = (1, 2, 3, 4, 5)
若函数不返回值,则称作一个过程,调用该函数仅仅为了副作用。
def box(s: String) { ... }
然而最好写作 def box(s: String): Unit = { ... }
val, lazy, def区别:val 在被定义时即被取值;lazy在首次被调用时被取值,def在每次被调用时都会被取值