Scala的大部分表达式都有返回值,所以可以将表达式负值给其他变量或者作为参数传递
如果一个表达式或者函数没有输出值则由系统默认返回一个Unit作为占位,表示为(),你可以在print中打印出来看。
传统其他语句的赋值如
x=y=1
这样的语句在scala里面得到的结果不是你想要的,这个语句的结果是y=1,但是x=(),也就是Unit。
Scala的高级for循环以及推导式
for(i <- 1 to 3;j <-1 to 3)
这里for循环是一个双重循环,按传统多重循环来看,i层在j之前,在这样的循环中,还可以在后面增加一个守卫,如下
for(i <- 1 to 3;j <-1 to 3 if i!=j)
这里后面的if称为守卫,与前面的推到式之间没有分号
如果在for循环的循环体以yield开始,则整个for循环表达式的返回值是一个集合,例如:
for(i <- 1 to 3) yield i%3
//会生产Vector(1,2,0)
这种以yield开始循环叫做for推导式
前面循环体中使用的i<- 1 to 3,这样的遍历是1,2,3
如果你并不需要末尾的值,则可以使用until ,例如:
i <- 1 until 3 //这样的生成器生成器遍历1,2
函数与方法
函数独立于类,用于实现一些计算,不改变其他状态,java中的函数只有使用静态类方法来模拟
方法用于修改对象的属性
在scala中除非是递归函数,否则我们都可以省略返回类型的定义
默认参数和带名参数
在scala中可以使用默认参数:在函数定义是给出默认参数值,如下:
defdecorate(str: String,left : String="[",right: String="]")=left + str+right
这样的函数,如果在调用时以显示的名称=值的调用,则不用在意参数顺序
如果一个函数需要一个数组作为参数,你可以使用_*告诉编译器将你的区间作为一个序列来处理,如下
Val s =sum(1 to 5:_*)//将1 to 5当做参数序列处理
没有返回值的函数被称作 过程,我们调用它仅仅是为了它的副作用。
懒值类似于java中的final,可以将他的初始化延迟到首次对他赋值,使用lazy 关键字。