课件代码1内存计算scala编程_第1页
课件代码1内存计算scala编程_第2页
课件代码1内存计算scala编程_第3页
课件代码1内存计算scala编程_第4页
课件代码1内存计算scala编程_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京传智播客教育 快学快学ScalaScala北京传智播客教育 主要内容l基础l面向对象l泛型l隐式转换l高阶函数lActor和Akka 主页: Object-Oriented Meets FunctionalObject-Oriented Meets FunctionalScala基础 lScala是一门以Java虚拟机为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言l使用Scala可编写出更加精简优雅的程序lScala的并发非常强大lScala可以访问任何Java类库声明变量lval:声明不可变的变量lvar:声明可变的变量l推荐使用vallval content:

2、 String = hello worldlval x, y = 100l变量声明时可以不指定类型,编译器可以自动推断出来方法la 方法 b 等价于a.方法(b)lval a,b = 10la + b 等价于a.+(b)l1 to 10 等价于 1.to(10)if判断val a = if (x 0) 1 else -1/混合类型val b = if (x 0) 1 else error/()表示“无有用值”val c = if (x 0) 1 else ()for循环for (i - 0 to 5) println(i)for (i - 0 until 10) println(i)for (

3、i - 1 to 3; j - 1 to 3 if i != j) println(10*i+j) + )for (i - 1 to 10 if i % 2 = 0) yield ifor (i - 1 to 10) yield i % 3函数def fun(x: Int) : Int = x+1/注意:参数类型必须声明,返回值类型可以不声明,函数是递归的必须声明返回类型def fac(n: Int) : Int = if(n =0) 1 else n * fac(n-1)函数/函数默认参数def fun(a: Int, b: Int = 100) = a + b/可变参数def sum(ar

4、gs: Int*) = var result = 0for (i x + 1/将匿名函数赋给变量val fun = (x: Int) = x + 1懒值/变量定义时即被取值val words = Source.fromFile(c:/words.txt).mkString/变量被首次使用时取值lazy val words = Source.fromFile(c:/words.txt).mkString/每一次调用该方法时都取值def words = Source.fromFile(c:/words.txt).mkString定长数组/3个整数的数据,所有元素为0val arr1 = new A

5、rrayInt(3)val arr2 = Array(0, 0, 0)val arr3 = Array(hadoop, spark)/取值、赋值val str = arr3(1)arr3(1) = storm变长数组ArrayBuffer类似Java中的ArrayListval a = ArrayBufferInt() 或val a = new ArrayBufferInta +=1 /在尾端添加元素a +=(1,2,3) /追加多个元素a += ArrayBuffer(7,8,9) /追加集合变长数组a.trimEnd(2) /移除最好两个元素a.insert(2, 6, 7) /在下标2之

6、前插入6,7a.remove(2, 2) /从下标2开始移除2个元素val b = a.toArray /转变成定长数据组b.toBuffer /转变成变长数据组遍历数组和数组缓冲val arr = Array(1,2,3,4,5)/带下标的for循环for (i - (0 until (arr.length, 2).reverse) println(arr(i)/增强for循环for (i - arr) println(i)数组转换转换动作不会修改原始数组,而是产生一个全新的数组val arr = Array(1,2,3,4,5,6,7,8,9,10)for(e - arr) yield e

7、 /生成一个与arr一样的for(e _)val d = arr.count(_2)映射val map = Map(a-1, b-2, c-3)或 val map = Map(a,1), (b,2), (c,3)/取值、赋值map(a)map.getOrElse(d, 0)map(b) = 22映射map += (e-8, f-9)map -= (f)/迭代for(k,v) - map)/交换k,vfor(k,v) JHashMap隐式导入:和Java程序一样java.lang总是被默认引入,scala也默认引入模式匹配和样例类Scala有一个非常强大的模式匹配机制,可以应用到很多场合:如sw

8、itch、类型查询,并可以结合样例类完成高级功能继承重新方法:重新一个非抽象的方法必须使用override修饰符o.isInstanceOfCl /java中的instanceofo.asInstacneOfCl /java中的 (Cl) oclassOfCl /java中的Cl.class样例类样例类是一种特殊的类,可用于模式匹配样例对象是单例的,也可以用于模式匹配高阶函数def fun(f: Double = Double) = f(100)fun(x : Double) = 2 * x)fun(sqrt _)高阶函数val fun: Int = (Int, Int) = x = (x,

9、x*2)fun(100)val fun: (Int,Double) = (Double, Int) = (x,y) = (y, x)柯里化将原来接受两个参数的函数编程接受一个参数的函数的过程。def fun(x: Int)(y: Int) = x * yfun(6)(7) fun(6) / (y: Int) = 6 * yfun(7) / 42泛型T : LowerBoundT % ViewBoundT : ContextBound+T-T视图界定T % M关系意味着T可以被隐式转换成MTT % ComparableT上下文界定T : M 要求必须存在一个类型为MT的隐式值隐式转换和隐式参数隐式转换和隐式参数是Scala中两个功能强大的工具,利用隐式转换可以丰富现有类的功能,从而写出非常优雅的程序。隐式转换利用隐式转换丰富类库功能val contents = new File(c:/words.txt).read引入隐式转换l位于源或目标类型的伴生对象中的隐式函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论