码迷,mamicode.com
首页 > 其他好文 > 详细

Scala学习笔记

时间:2015-09-24 19:32:19      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:scala精髓


1类型自动匹配(模式匹配)

2函数是有值的(匿名函数是函数的常态)

递归函数需要指定返回值

3.内部类隶属于外部类的实例本身,而java内部类属于外部类,对外部类的依赖路径依赖

4.object类似于java中的静态类 里面的所有成员都是静态的,适用于配置文件

5.同名object是class的伴生对象,很多时候伴生对象是做为伴生类静态成员的封装区域

6.scala方法的最后一行是返回值无return

7.scala可变参数Int*  java中 int... args

8.apply使用与单例

http://book.51cto.com/art/201408/449448.htm

9.接口trait(可以有非抽象方法)比 interface (只能有抽象方法) 功能强大很多  extends ..... with....with....

跟java一样只能继承一个trait或者class,如果还要继承其他trait需要with(对象混入)

10. 包对象(package object)  包中所有类可以直接访问包对象的所有成员和方法

11scala包的隐式引用

import java.lang._

import scala._

import Predef._

12.映射符号 => lambda表达式,表示一个匿名函数

13.占位符  _  placeholder 模式匹配代表字符串

14. 本地函数 在函数中定义的函数,内部函数属于私有函数,外部不可以访问,实现高内聚低耦合

15.偏函数 _ 代表参数 编译器根据sum _ (空格+下划线)自动产生类里的apply方法 传递部分参数变成另外一种函数

16.闭包 javascript支持 闭包就是能够读取其他函数内部变量的函数,由于javascript的语言特性,如果你想读取一个函数内部的变量,那你本身也必须是这个函数内部子函数。

17.高阶函数 map() 以函数作为参数


18.模式匹配提取器 Extrator

                      match

                      case

                      case

模式匹配在具体数据类型的上的应用


19.正则表达式后面带个.r

20.Scala的case class和pattern matching(模式匹配),这俩个两个程序结构对于处理树结构的数据非常有帮助。Scala的case class使得对对象进行模式匹配变得非常方便,简单的来说,Scala的case class就是在普通的类定义前加case这个关键字,然后你可以对这些类来模式匹配。

成员默认是val的,成员未显式声明var或者val的话,默认是val(常量)

每个case class都会有伴生对象里面有apply方法

伴生对象会帮我们构造出case class的具体对对象


unapply从已经构建出的对象中(case class or object)提取出内容,而伴生对象的apply方法是构建对象


21 构造器的函数名为this,重载构造器(附属构造器)必须要调用其他的附属构造器,其他的构造器在最终形态上会调用主构造器,scala函数若没有参数省略小括号,this()可以简写成this

22.  @符号可以引用匹配到的对象

23 sealed封闭   只能在当前文件里头被继承,限制子类必须在同一个文件中

Option 的两个子类 Some None

24.两个::List的方式,三个:::组合List,List集合分为head(第一个)和tail两部分

25.拉链操作 zip

26.flatMap  集合map后合并多个集合

27.List更多操作  partition(分区) span  find(第一个满足条件的元素) takeWhile  dropWhile 


exists (有一个满足返回true) forall (全部满足返回true)

28.foldLeft  foldRight从最左边开始和最右边开始  sortwith(_<_)排序操作

29. List.range(2,5)   半闭半开区间  List(2,3,4)不包括5

30.List.map2同时对两个集合相应元素操作

31.可变集合需要引入mutable包,默认是不可变的集合

可变集合可以直接用+=和-=追加删除元素,++=和--=追加删除集合

32.HashMap非常高效的,对key进行hashcode取值

33.treeMap,treeSet有序的

34.List[+A]协变

35. <- 提取符号(迭代器)


37. f 代表函数

38. Bounds 类型限定符号

                                         < :  上界   只能是子类

                                         > :  下界   只能是父类

              更常用             < %  视图界定 不是子类会隐式转换  Int ->RichInt String->RichString

39.  Ordered[T]对象可以用>或者<符号比较对象代替Comparable[T]的comapreTo方法

40. [K  : Ordering] context bounds 上下文界定 存在一个类型为Ordering的隐式值

   spark大量使用

41. [T : Manifest]  内部自动构建Manifest类型的隐式参数 implicit

      [T : ClassTag]  编译时会自动翻译成隐式参数和隐式值

      虚拟机运行时泛型是擦除的,不认识泛型 ,必须给具体的类型

42. 理解即可 类型约束   A < : < B  A必须是B的子类比< :更严格,编译的时候就会去判断类型

                       A=:=B  A和B是同类型  

43. 理解即可 Variance可变的或变型   [+A] covariance(协变)  [-A] contravariance(逆变)

44. 默认情况下只要方法是泛型的,它的参数是逆变的,返回值就是协变的

45.this.type表示当前对象(this)的类型,this指代当前的对象。this.type被用于变量,函数参数和函数返回值的类型声明,主要是在某些场合下加强类型约束,或者说是为了确保类型的绝对安全,链式调用

46. type相当于起个别名

47.  spark很少使用 结构类型 不想从类或者接口的角度限制它, 传入的参数包含某种方法

48. 复合类型(extend ....with ....with.... )与结构类型结合使用 

49.infix type (中置类型)  中置表达式(右结合)    >>:  代表函数名   中置类型:类型名称写在两个参数中间,泛型的实例在类型的两侧

50.   self => 给this实例指针起别名   内部类引用非常方便  this:S1 =>自身类型实例约束必须混入S1



                           

Scala学习笔记

标签:scala精髓

原文地址:http://tianxingzhe.blog.51cto.com/3390077/1697872

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!