快学Scala(2)--控制结构和函数

块表达式: 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在每次被调用时都会被取值

   

原文地址:https://www.cnblogs.com/PaulingZhou/p/6615973.html