scala学习第二章 控制结构与函数

来源:互联网 发布:苹果cms模板论坛 编辑:程序博客网 时间:2024/06/07 10:20

在scala中可以将if/else表达式的值赋值给一个变量 例如: val s = if(x > 0) 1 else o

var sum = 0;val s == "hello"for(i <- 0 to s.until s.length)//until 方法返回一个并不包含上限的区间sum += s(i)

也可以不需要使用下标

var sum = 0for(ch <- "Hello") sum += ch

每个生成器都可以带一个守卫, 以if开头的Boolean表达式

<pre name="code" class="java">for(i <- 1 to 3; j <- 1 to 3 if i !- j) println((i*10 + j) + " ")//将打印 12 13 21 23 31 32//注意if 前面没有分号

如果循环体的循环以yield 开始,则该循环会构造出一个新的集合,每次迭代生成集合中的一个值

for(i <- 1 to 10) yield i % 3//生成Vector(1,2,0,1,2,0,1,2,0,1)


fort推导式和它的第一个生成器是类型兼容的

for(c <- 'Hello"; i <- 0 to 1) yield (c + i).toCHar//将生成"HIeflmlmop"for(i <- 0 to 1; c <- "Hello") yield (c+i).toChar//将生成Vector('H','e','l','l','o','I','f','m','m','p')


scala中除了支持方法,还支持函数,方法对对象进行操作,函数不是.

定义函数,需要给出函数的名称,参数,函数体,例如:

def abs(x: Double) = if(x > 0) x else -x//只要函数不是递归的,你就不需要指定返回类型,scala编译器可以通过=符号右边表达式的类型推断出返回类型

如果函数需要多个表达式完成,可以用代码块,代码块中最后一个表达式的值就是函数的返回值

def fac(x : Int) = {var r = 1for(i <- i to n) r = r * ir}

对于递归函数我们必须指定返回类型. 例如:

def fac(x : Int) : Int = if(n <= 0) 1 else n * fac(n - 1)//如果没有返回类型,scala编译器无法校验n * fac(n-1)的类型
实现一个可以接受可变长参数列表的函数


val s = sum (1,2,3,4,5)

函数会得到一个类型为Seq的参数


0 0