快学Scala第二章学习笔记

1、如果在REPL中粘贴成块的代码,可以键入:paste,把代码粘贴进去,CTRL+D结束

2、在Scala中,{}块包含一系列的表达式,其结果也是一个表达式。快中最后一个表达式的值就是块的值。

这种特性对于那种某个val初始化需要分多步完成的情况很有用。

例如:val distance={val dx = x-x0; val dy=y-y0; sqrt(dx*dx + dy*dy)}

3、x=y=1 //别这样写  y=1的值是(),不太可能把一个Unit蕾西的值赋予给x。

4、用readLine函数从控制台读取一行输入。带一个参数作为提示字符串

例如:val name=readLine("Your name: ")

5、在for循环的变量之前并没有val或var的指定。该变量的类型是集合的元素类型。循环变量的作用域一直持续到循环结束。

util方法返回一个并不包含上限的区间。

6、Scala并没有break、continue语句来退出循环。控制权的转移是通过抛出和捕获异常完成的,如果时间很重要,尽量避免用这套机制。

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

8、定义函数,需要给出函数的名称、参数和函数体。必须给出所有参数的类型,只要函数不是递归,可以不需要指定返回类型。Scala编译器可以通过=符号右侧的表达式类型推断出返回类型。递归函数没有指定返回类型,Scala编译器无法校验返回类型。

9、带名参数并不需要跟参数列表的顺序完全一致。带名参数可以让函数更加可读。

10、Scala对于不返回值的函数有特殊的表示法。如果函数体包含在花括号当中但没有前面的=号,那么返回类型就是Unit

11、当val被声明为lazy时,它的初始化将被推迟,直到我们首次对它取值。懒值并不是没有额外开销,我们每次访问,都会有一个方法被调用,这个方法将会以线程安全的方式检查该值是否已被初始化。

12、try/catch和try/finally的目的是互补的。try/catch语句处理异常,而try/finally语句在异常没有被处理时执行某种动作(通常是清理工作)

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页