
Scala从入门到住院
快学scala的简要笔记
独孤尚亮dugushangliang
古人之观于天地、山川、草木、虫鱼、鸟兽,往往有得,以其求思之深而无不在也。夫夷以近,则游者众;险以远,则至者少。而世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。有志矣,不随以止也,然力不足者,亦不能至也。有志与力,而又不随以怠,至于幽暗昏惑而无物以相之,亦不能至也。然力足以至焉,于人为可讥,而在己为有悔;尽吾志也而不能至者,可以无悔矣,其孰能讥之乎?
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Scala-21 隐式转换和隐式参数
文章目录隐式转换利用隐式转换丰富现有类库的功能引入隐式转换隐式转换规则隐式转换隐式转换函数( implicit conversion function )指的是那种以 implicit关键字声明的带有单个参数的函数。这样的函数将被自动应用,将值从一种类型转换为另一种类型 。例如Fraction类,将整数n转换为Fraction(n,1),使用implicit def int2Fractio...原创 2020-01-29 15:13:16 · 247 阅读 · 0 评论 -
scala-19 高级类型
文章目录单例类型类型投影单例类型( singleton type )可用于方法串接和带对象参数的方法类型投影( type projection )对所有外部类的对象都包含了其内部类的实例类型别名( type alias )给类型指定一个短小的名称结构类型( structural type )等效于“鸭子类型( duck typing )”存在类型( existential type )...原创 2020-01-21 19:09:55 · 345 阅读 · 0 评论 -
scala-18 类型参数
类型参数的意思就是类型作为参数用类型参数实现类和函数,这样的类和函数可以用于实现多种类型,例如Array[T]可以放任意类型T的元素可以指定类型如何根据类型参数的变化而变化类、特质、方法、函数都可以有类型参数类型参数放置在名称之后,用方括号括起来类型界定的语法, T <: 上界,T >: 下界,T : ContextBound类型约束来约束一个方法+T 协变表示某个泛型类的子类型关系和参数T方向一致,或用 -T逆变表示方向相反协变适用于表示输出的类型参数,例如不可变集合中的元原创 2020-01-13 23:06:28 · 1611 阅读 · 2 评论 -
17 Future
文章目录在future中运行任务等待结果并发应用在Future{}里的代码块是并发执行的future要么成功得到一个结果,要么以异常失败用回调实现future完成时收到通知,串联回调比较麻烦map/flatMap或for组合多个futurepromise有一个其值可被单次设置的future,使得实现产出的结果的任务变得更为灵活适合并发计算负载的执行上下文在future中运行任务...原创 2020-01-10 22:39:54 · 431 阅读 · 0 评论 -
15 注解
文章目录本章要点什么是注解什么可以被注解本章要点注解让可以在程序的各项条目中添加信息,这些信息可以被编译器或外部工具处理可以为类、方法、字段、局部变量、参数、表达式、类型参数以及各种类型定义添加注解表达式和类型的注解跟在被注解的条目之后注解的形式生成等效的java修饰符@volatile,@transient,@strictfp,@native@throws生成与java兼容的th...原创 2020-01-06 20:59:02 · 295 阅读 · 0 评论 -
14 模式匹配和样例类
文章目录模式匹配守卫变量模式类型模式匹配数组、列表和元组提取器变量声明中的模式for表达式的模式样例类copy方法和带名参数case语句的中置表示法匹配嵌套结构模式匹配是一个很强大的机制,可以应用在很多场合,switch语句、类型检查、获取复杂表达式的不同部分,样例类针对模式匹配进行了优化。模式匹配match case,捕捉到第一个分支就不会再继续其他的分支var signs = ne...原创 2019-12-29 22:33:46 · 245 阅读 · 0 评论 -
13 Collection 容器
文章目录主要的collection特质可变和不可变的collection序列Seq官方collection教程所有collection扩展自Iterable特质三大类,序列,集合,映射 seq set map对于几乎所有的collection,都提供了可变和不可变的版本列表要么是空的,要么是一头一尾,尾是列表集合没有先后次序+ 将元素添加到无先后次序的容器中,+: 和 :+向前或向...原创 2019-12-25 22:30:35 · 325 阅读 · 0 评论 -
12 高阶函数
文章目录作为值的函数匿名函数带函数参数的函数参数类型推断作为值的函数变量中存放函数将方法变为函数import scala.math._val num = 3.45val fun = ceil _ //这里的 _ 表示这个函数,而不是没有传参数//或 val fun = ceil(_)//fun: Double => Double = <function...原创 2019-12-19 22:10:37 · 129 阅读 · 0 评论 -
11 操作符
文章目录标识符中置操作符一元操作符赋值操作符优先级标识符由字母、数字、运算符组成一元和二元操作符其实是方法调用操作符优先级取决于第一个字符,结合性取决于最后一个字符apply和update方法在对expr(args)表达式求值时被调用提取器从输入中提取元组或值的序列扩展自Dynamic特质的类型可以在运行期检视方法名和入参标识符变量、函数、类等的名称统称为标识符。可以使用U...原创 2019-12-17 22:43:07 · 170 阅读 · 1 评论 -
10 特质
文章目录特质带有具体实现的特质带有特质的对象叠加在一起的特质特质中重写抽象方法当做富接口使用的特质特质中的具体字段特质中的抽象字段特质的构造顺序初始化特质中的字段扩展类的特质自身类型特质的背后发生了什么类可以实现任意数量的特质特质可以要求实现他们的类具备特定的字段、方法或超类特质可以提供方法和字段的实现多个特质叠加时,后面的特质其方法先被执行特质同时拥有抽象方法和具体方法,以及状...原创 2019-12-15 14:52:55 · 151 阅读 · 1 评论 -
9 文件和正则表达式
文章目录读取行读取字符读取词法单元和数字从URL或其他源读取读取二进制文件写入文本文件读取行使用scala.io.Source,然后调用getLines方法,返回迭代器import scala.io.Source//第一个参数可以是字符串或java.io.Fileval source = Source.fromFile("D:\\data\\shuihu1.txt")//返回一个迭...原创 2019-12-14 22:36:02 · 235 阅读 · 0 评论 -
8 继承
文章目录扩展类重写方法类型检查和转换受保护字段和方法超类的构造重写字段匿名子类抽象类extends、final关键字与java相同重写方法必须用override只有主构造器可以调用超类的主构造器可以重写字段本章只介绍继承类,继承特质的后面再探讨扩展类扩展类同Java一样,(又是跟Java一样,都不会Java),使用extends关键字在定义中可以给出子类需要但是超类没有的字段...原创 2019-12-10 21:39:54 · 143 阅读 · 0 评论 -
7 包和引入
文章目录包作用域规则串联式包语句文件顶部标记法包对象包可见性引入引入时重命名和隐藏方法默认引入包可以像内部类那样嵌套包路径不是绝对路径包声明链x.y.z不自动将中间包x和x.y变成可见文件顶部不带花括号的包声明在整个文件范围内有效包对象可以持有函数和变量引入语句可以引入包、类和对象引入语句可以出现在任何位置引入语句可以重命名和隐藏特定成员java.lang.scala和Pred...原创 2019-12-09 21:42:18 · 137 阅读 · 0 评论 -
6 Scala对象
文章目录单例对象伴生对象扩展类或特质的对象Apply方法应用程序对象枚举object ,需要某个类的单例实例或者其他值或函数一个挂靠的地方。用对象作为单例或存放工具的方法单例对象Scala用object达到静态方法或静态字段的目的对象定义了某个类的单个实例对象的构造器在该对象第一次被使用时调用,如果不被使用,那么构造器也不会被执行对象本质上可以拥有类的所有特性,可以扩展其他类或...原创 2019-12-08 13:14:02 · 120 阅读 · 0 评论 -
5 Scala类
文章目录简单类和无参方法带getter和setter的属性只带getter属性对象私有字段Bean属性辅助构造器主构造器简单类和无参方法一个简单的类class Counter{ //字段必须初始化 private var value = 0 //方法默认公有 def increment(): Unit ={ value+=1 } def current()...原创 2019-12-07 22:13:08 · 128 阅读 · 0 评论 -
4 映射和元组
文章目录构造映射获取映射的值更新映射的值遍历映射元组拉链操作构造映射映射是键/值对偶的集合构造映射使用Map(键1->值1,...,键n->值n),Map((键1,值1),...,(键n,值n))或默认为不可变映射。映射本质上是两个元素的对偶,不过Map的键不能重复,元组的的两个元素的第一个可以重复;如果键重复出现,其值会是最后出现的键对应的值scala> val ...原创 2019-12-07 13:39:15 · 165 阅读 · 0 评论 -
3 数组相关操作
定长数组长度不变的数组,使用Array声明数组使用new Array[类型](元素个数)数组索引使用圆括号()虽然数组是val声明的,但是元素依然是可以改变的//整型数组scala> val nums=new Array[Int](10)// nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)// 字符串数组sc...原创 2019-12-07 10:47:51 · 107 阅读 · 0 评论 -
2 控制结构和函数
文章目录条件表达式语句终止块表达式和赋值输入和输出循环break和continue高级for循环函数默认参数和带名参数变长参数过程条件表达式if/else语句同Java和C++一样scala的if/else的表达式有值if(x>0) 1 else -1将表达式的结果赋值给变量val s = if(x>0) 1 else -1scala中每个表达式都有一个类型...原创 2019-12-06 23:24:39 · 236 阅读 · 0 评论 -
1 scala基础
文章目录1 声明值和变量2 常用类型3 算术运算符重载4 方法调用5 apply方法6 scaladoc1 声明值和变量val声明的不可变变量,var声明的变量可变。val answer=8//如果再给其赋值 answer=2 会报错//<console>:12: error: reassignment to val// answer=2var count...原创 2019-12-06 20:55:00 · 131 阅读 · 0 评论 -
IDEA软件Spark、Scala的开发环境搭建Windows
文章目录spark Scala开发环境搭建下载安装jdk、idea、scala,记录好路径打开idea 新建Maven project,选择jdk路径设置工程参数设置scala插件设置安装scala更新软件源修改pom文件新建scala类windows本地模式saveAsTextFile失败的解决方法idea打包jar包发送到集群运行spark Scala开发环境搭建下载安装jdk、idea、...原创 2019-12-06 13:26:05 · 391 阅读 · 0 评论