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

本文介绍了Scala中的控制结构,包括有值的if表达式、块的值、Unit类型、模式匹配以及for推导式。同时,讨论了函数的使用,如递归函数、变长参数和懒值的概念,强调了Scala中赋值操作的特性以及在REPL中的代码处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两周项目提测与上线,好久没写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、懒值主要应用于开销较大的初始化,其本身也有开销,因为每次访问懒值,都有一个方法被调用,而这个方法将以线程安全的方式检查该值是否被初始化。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值