scala学习笔记(二)

1.告诉编译器你希望这个参数被当做参数序列处理,追加":_*"即可,如:val s=sum(1 to 5:_*).
2.如果函数体包含在花括号当中但没有前面的=号,那么返回类型为Unit,这样的函数称为过程。过程不返回值,我们调用它仅仅是为了副作用。建议大家总是显示声明Unit 返回类型。
3.当val被声明lazy时,它的初始化将被推迟,直到我们首次对它取值。
4.try/catch:处理异常;try/finally:在异常没有被处理时执行某种动作,通常是清理工作。二者目的互补。可以组成try/catch/finally语句。throw表达式有特殊的类型Nothing,捕获异常的语法通常采用模式匹配的语法,如果你不需要使用捕获异常的对象,可以使用_来代替变量名。scala没有受检异常——你不需要声明说明函数或者方法可能会抛出某种异常。java有受检异常,必须做出声明,导致可能出现很长的方法签名。
5.异常工作机制:当前的程序的运算被停止,系统将运行控制权交给在离抛出点最近的异常处理器处理并恢复,如果没有找到符合要求的异常处理器,则程序退出。
6. Scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中.
7.在Scala里面的class和object在Java层面里面合二为一,class里面的成员成了实例成员,object成员成了static成员。
8.Scala里相当于Java接口的是Trait(特征)。Trait的英文意思是特质和性状(本文称其为特征),实际上他比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。Scala中特征被用于服务于单一目的功能模块的模块化中。通过混合这种特征(模块)群来实现各种应用程序的功能要求,Scala也是按照这个构想来设计的。一般情况下Scala的类只能够继承单一父类,但是如果是特征的话就可以继承多个,从结果来看就是实现了多重继承。
9.scala里的类型,除了在定义class,trait,object时会产生类型,还可以通过type关键字来声明类型。
type相当于声明一个类型别名:
scala> type S = String
上面把String类型用S代替,通常type用于声明某种复杂类型,或用于定义一个抽象类型。
10.val值不可变,指的是val变量指向的对象不可变,不能指向第二个其他的对象,值不可变对于引用类型来说意味着指向的内存中的实际对象不变,他只约束了变量只能对应某个对象,但不约束所对应对象内部状态是否可以发生变化;var值可变,指的是var变量指向的对象任意可变。
11.变量定义: 
val:类似java中final类型的变量 
1,基本格式:val 变量名:变量类型 = 值
2,其中有时变量类型可以省略,可以自动识别
3,变量不能赋值,修改
var :等同于java中的非final型变量
12.函数定义
函数格式: def 函数名(参数列表,...):返回结果类型={}
有时函数必须制定返回结果类型,如函数时递归,就必须明确制定返回结果类型
有时如果函数仅 一个语句,连花括号都可以不写
接下来,是一个既不传参,也不返回有用结果的函数的定义,据说解析器返回
greeting():Unit,其中Unit值得时greetin的返回类型,类似于Java的void类型,而且Java中的void类型会被映射成Unit
例如:
   //写法一,始终待返回值
   def add(x:Int,y:Int):Int={
x+y} 
   def returnUnit():Unit={
 println("another way to return void") } 
   //写法二,省略非Unit返回值;如果没有写返回值,则根据等号后面的东西进行类型推演
   def test(x:Int)={
 x  }
   //写法三,省略等号,返回Unit
   def returnVoid(){
println("return void") } 
   //写法四:省略花括号,如果函数仅包含一条语句,那么连花括号都可以选择不写
   def max2(x: Int, y: Int) = if (x > y) x else y 
   def greet() = println("Hello, world!") 
   def f():unit

你可能感兴趣的:(scala学习笔记(二))