1:class object trait区别
class只会被编译,不会被执行
object实现static的功能
scala通过trait实现多继承的功能。另外trait可以定义自己的属性并且实现方法体,scala中通过with实现多继承
class Test extends TraitA with TraitB{}
**函数式编程:**一切皆对象,函数是一等公民,可以独立存在
2:尾调用:一个函数的最后一步操作是调用另一个函数,
作用:只保留内层函数的调用记录,减少内存开销
作用于尾递归,可以防止栈溢出
3:关于map函数
函数式编程都有一个map函数,map函数就像一个加工厂,传入一个函数,利用这个函数将集合里的每一个元素处理并返回结果
aList.map(processFunc),aList里面的每一个元素将会变成 processFunc的返回值,这个processFunc一般都是匿名函数,因为用过一次就用不到了
4: 符号 <-
称为:generator,用于遍历集合对象
for(i <- 0 to 10) 语义化写法 相当于 for(i <- 0.to(10))
5:符号 ->
是所有scala对象都有的一个方法,如A -> B 返回的结果是一 个二元元组 (A, B) 多用于map映射
6:符号 =>
是scala的匿名函数,左边是参数,右边是函数体
7:函数定义格式:
def 函数名(参数列表): 返回值类型 = {函数体}
函数定义去掉 = ,这样的函数称之为 “过程”,其返回值一定是Unit 即 ()
8:符号 _ 有很多意义
1、作为通配符类似于java中的 ,如 import scala.math._
2、_ 作为一个整体,告诉编译器你希望将某个参数当做参数序列处理
3、指代一个集合中的每一个元素,如 一个Array a.filter(%2 == 0).map( * 2)
4、在元组中,可以使用 _1,_2,_3… 访问组员。如:a._1 其中点操作符可以用空格代替
5、使用模式匹配可以获取元组的成员,如果有的部件不需要,使用_代替。如:
case (first, second, _) => println(first)
6:代表某一类型的默认值,对于 Int,代表0,Double,0.0,引用类型,null
7: ::: 操作符
表示List的连接操作
如: List(1,2) ::: List(3) 结果返回 List(1,2,3) ,原来的两个List 保持不变
8: :: 操作符
表示普通元素与List的连接操作
例1: 1 :: List(2,3) 结果返回List(1,2,3)
运算规则**** :: 是右侧对象的方法,此处即List(2,3)这个对象的方法,:: 左侧的运算数是 :: 方法的参数
例2: 1 +: List(2,3) 1置于List头
例3: List(2) :+ 1 1置于List尾
技巧:List总是面向 : 符号
9: + 操作符
用于 Set 或 Map 添加元素
例1:Set(2) + 3 返回结果 Set(2,3)
例2:Map(2 -> 3) + (3 -> 3) 返回结果 Map(2 -> 3,3 ->3)
******** 操作符 ++ 用于集合之间的的连接操作
例3:Set(2) ++ Set(3)
Map(2 -> 3) ++ Map(3 -> 3)
10:tuple 最多可以有22个元素
11:unapply处理的是apply方法的返回值
12:I/O Source Stdin
13:scala 不支持 三目运算符 不支持switch
高阶函数
closure:
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁