scala基础——控制结构和函数

来源:互联网 发布:linux tar只读权限 编辑:程序博客网 时间:2024/06/03 12:10

这两周项目提测与上线,好久没写Scala的笔记了

scala中几乎构造的所有语法结构都有值

1、Scala中if表达式也是有值的

2、块中最后一个达式的值就是该块的值

3、scala中的unit等价于c/c++语言中常用的void

4、scala中每个表达式都有一个类型

5、if (a>0)"positive"  else -1    // 该语句是两个分支类型的公告超类型(Any)

6、if (b>0) 1 等价于 if (b>0) 1 else ()  //这里把()当做无有用值的占位符。

7、scala没有switch语句,而是用模式匹配机制

8、REPL同意时间是只能解析一行代码,可以用黏贴模式(冒号:)把代码黏贴进去,键入Ctrl+D,REPL会把代码看做一个整体

9、运算符放在语句末尾表示这里并不是语句的结束,也可以用{ 表示后面还有更多的内容。

10、由于scala中的赋值动作本身的值是unit,所以这样的操作x = y = 1 是不正确的,因为y=1的值是(),把()赋值给x没有意义。

11、for (i  <-  表达式) //变量 i 遍历 <- 右边表达式的所有值,其中一个 i 的类型不会提前指定,其类型是集合的元素类型。

12、遍历字符串时需要用0到n-1的区间,此时用until而不是to

13、如果for循环的循环体以yield开始,则该循环将构造一个集合,每次迭代生成集合中的一个值,此类循环成为推导式

14、def fac(n:nt):BigInt =  if(n <= 0) 1 else n*fac(n-1)  //带名参数无需与参数列表的顺序完全一致

15、变长参数 

def sum(args:Int*) = {

var ret = 0

for(arg <- args) ret += arg

ret

 }

16、val s = sum(1 to 100:_*)  // 用  :_*  将表达式转化成一个seq

17、如果一个函数不是递归函数,则无需给出返回类型,递归函数一定要有返回函数

18、如果函数体包含在花括号中,但没有前面的 = 号 ,则返回类型为unit,这样的函数成为过程(procedure)例如

     def  box (s:String) { .. }    等价于 def box(s:String) :Unit = {...}

19、当val声明为lazy时,其初始化被推迟,直到我们首次对它取值

20、懒值主要应用于开销较大的初始化,其本身也有开销,因为每次访问懒值,都有一个方法被调用,而这个方法将以线程安全的方式检查该值是否被初始化。


0 0