
scala基础
文章平均质量分 72
lazy_moon
不积跬步无以至千里,武艺不精何以保家乡
展开
-
scala条件控制和循环
条件控制 条件控制的语法结构和java是一样的。但与java很大的区别在于,scala里的if/else语句是有返回值的。例如: if(x > 0) x else 0可赋值给变量,例如: val a = if(x > 0) x else 0返回的值也可以是混合型数据,例如: val a = if(x > ...原创 2018-08-04 10:41:15 · 1682 阅读 · 0 评论 -
scala隐式转换
目录隐式转换的概念隐式转换的使用隐式转换做参数类型转换隐式转换增强现有类型隐式参数利用隐式参数进行隐式转换再议Context Bounds隐式转换的概念隐式转换函数(implicit conversion function)是以implicit关键字声明的带有单个参数的函数,这样的函数将被自动应用,将值从一种类型转换为另一种类型。隐式转换函数叫什么名字是无所谓的...原创 2018-09-05 07:25:38 · 2196 阅读 · 0 评论 -
scala中的模式匹配和样例类
目录模式匹配模式匹配中的守卫和变量对象模式匹配数组模式匹配 列表模式匹配元组模式匹配样例类(cass class)匹配嵌套结构Option的使用偏函数模式匹配模式匹配是scala中的另一个特色,比java中的swich case语句强大的多,不仅能够对值进行匹配,还可以对类型、集合元素进行匹配。match case的语法如下:变量 match {...原创 2018-08-31 07:57:02 · 1028 阅读 · 0 评论 -
scala集合的一些高级操作
目录流懒视图流这个流(stream)操作是一个尾部懒计算的不可变列表,只有在需要它时,它才会计算。 上面展示了创建Stream,为Steam增加head,构造一个新的Stream,增加head使用“#::”符号,增加之后。调用Stream的尾部看看,究竟能得到什么 调用tail方法得到尾部Stream,相当于在原有Stream的基础上,使尾部的第一个元素作为he...原创 2018-08-28 20:11:20 · 899 阅读 · 0 评论 -
scala的函数式编程(二)
参数类型推导scala会尽可能地推导出函数的类型,使得scala代码非常简洁//参数类型推断Array(1,2,3,4).map((x : Int) => x * 3)//map方法会推断出要出入一个 Int => Int 类型的函数,因此可以省略函数参数的类型,写成:Array(1,2,3,4).map((x) => x * 3)//当只有一个参数时,可...原创 2018-08-24 12:53:59 · 587 阅读 · 0 评论 -
scala的函数式编程(一)
目录引言将函数作为值匿名函数函数的高级用法将函数作为参数将函数作为返回值(很重要)引言函数是scala中最重要的部分,有人愿意称“函数式scala中的一等公民”。也就是因为函数才使得scala更加简洁、优雅、又耐人寻味,总之,函数式编程在scala中是一等一的重要,使用scala开发的各类框架都存在这大量函数,如果想去了解、阅读Spark源码,函数式编程这一关必须要...原创 2018-08-22 20:43:57 · 5319 阅读 · 0 评论 -
scala特质
scala中提供了“trait(特质)”这个特殊概念,特质并非接口,它可以同时拥有抽象方法和具体方法,一个类可以拥有多个特质,这一特性解决了java接口的问题。类可以通过“extends”关键字继承trait,这里不是implement,二是extends,类继承了trait后必须实现trait中的抽象方法,实现时不需要使用“override”关键字。scala中不支持类的多继承,但支持tra...原创 2018-08-16 11:25:16 · 1140 阅读 · 0 评论 -
scala对象
目录单例对象伴生对象apply方法枚举单例对象单例对象(Object)相当于class类的单例示例,通常放一些静态方法或静态变量。对象的无参构造器在第一次使用时被调用,且单例对象没有有残构造器。伴生对象如果有一个class,还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类。伴生类和伴生对象必...原创 2018-08-14 07:49:15 · 544 阅读 · 0 评论 -
scala类
package study.classstudyimport scala.beans.BeanPropertyclass Person { //必须初始化字段 //定义一个公有字段name, //生成面向JVM的类时候,会生成一个私有字段name和对应的公有getter、setter方法 //getter,setter方法分别叫做name,name_ var ...原创 2018-08-13 08:38:47 · 209 阅读 · 0 评论 -
scala映射和元组
目录映射(Map)定义获取映射的值修改、增加、删除映射映射的遍历元组(Tuple)拉链函数(zip)映射(Map)定义映射其实就是“键值对”,scala中分为:定长映射和变成映射。定长映射:scala.collection.immutable.Map,使用时不需要引用变成映射:scala.collection.mutable.Map,使用时需要引用,...原创 2018-08-08 20:21:29 · 312 阅读 · 0 评论 -
scala入门
目录用一句话概括Scala scala解释器 scala的编译变量声明scala类型运算符函数和方法的调用 用一句话概括Scala scala是一门运行在JVM上的高级编程语言,所有Scala代码都必须编译为字节码,由JVM进行运行,可以与Java无缝互操作。 scala解释器 解释器也成为Read(取值)-> Evaluation(求值)-...原创 2018-08-03 10:56:25 · 2144 阅读 · 0 评论 -
scala继承
继承继承是面向对象编程语言的重要概念,简单一句话就是“儿子继承爸爸,拥有爸爸的很多可以被继承的特征(method和field)”。scala中子类继承父类与java一样,使用“extends”关键字。重写父类方法时使用“override”关键字。使用父类的方法或变量时使用“super”关键字。对象匹配和转换classOf[T]看成Java里的T.class,可以精...原创 2018-08-14 21:35:38 · 1511 阅读 · 0 评论 -
scala数组
目录定长数组变长数组Array和ArrayBuffer相互转换遍历数组数组的常见方法定长数组定长数组的定义有种:scala> val arr1 = Array[Int](1,2,3,4) //创建数组并设置具体内容arr1: Array[Int] = Array(1, 2, 3, 4)scala> var arr2 = new Array[Int...原创 2018-08-07 19:35:24 · 709 阅读 · 0 评论 -
scala异常处理
scala的异常机制和java的异常机制是一样的,抛出的异常必须是java.lang.Throwable的子类,但是scala中没有“受检”异常的机制。//这是java的“受检”异常的方式,在可能抛出异常的方法上做出声明//scala中没有这样的方式public void doSomething() throws IOException{ ....} throw表达式,th...原创 2018-08-06 19:20:17 · 1386 阅读 · 0 评论 -
scala方法和函数
目录方法的定义默认参数变长参数过程懒值(lazy)方法VS函数定义方式表达形式参数要求方法和函数的相互转换方法的定义有以下几点需要注意:所有参数必须制定类型; 递归方法,不能省略返回值类型,其他情况下可以忽略(方法可以通过=右侧的函数主体推断出返回值类型) 单行方法主体,可以与方法写在一行并忽略{}默认参数scala> de...原创 2018-08-05 12:40:14 · 4333 阅读 · 0 评论 -
scala类型参数
目录泛型类泛型函数上下边界BoundsView BoundsContext BoundsManifest Context Bounds协变和逆变总结泛型类泛型类,顾名思义,其实就是在类的声明中,定义一些泛型类型,然后在类内部,比如field或者method,就可以使用这些泛型类型。使用泛型类,通常是需要对类中的某些成员,比如某些field和method中的参...原创 2018-09-02 14:07:36 · 406 阅读 · 0 评论