![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Scala
ThisIsNobody
这个作者很懒,什么都没留下…
展开
-
Scala编程 PartialFunction
1 PartialFunction和偏应用函数Partially Applied Function是不同的概念2 所有的Map和Seq类型都扩展了PartialFunction3 API4 大佬的解释原创 2018-07-12 14:51:02 · 230 阅读 · 0 评论 -
Scala编程 集合类型
Scala官网Collection学习基础语法GitHubCollection库区分可变类型和不可变类型Collection库:scala.collection.mutable._/scala.collection.immutable._1 基本Collection > Array 数组可变 > List 列表不可变 > Tuple ...原创 2018-07-06 23:13:21 · 134 阅读 · 0 评论 -
Scala编程 函数式风格
在《Scala编程》一书中,解释纯函数式风格满足三点:1 使用val,而不使用var,代码更简洁明白2 使用不可变对象,而不使用可变对象3 没有副作用 > 一个方法返回值如果为Unit,则方法本身的作用只能通过副作用实现 > print > while循环Scala并不是纯函数式编程,偏向于纯函数式编程,可以在...原创 2018-07-06 23:12:59 · 231 阅读 · 0 评论 -
Scala编程 闭包
A closure is a function, whose return value depends on the value of one or more variables declared outside this function.闭包是捕获函数外部变量的绑定,且返回值依赖于外部定义的变量的函数f是个闭包,依赖于外部变量outer...原创 2018-07-06 23:33:39 · 338 阅读 · 0 评论 -
Scala编程 Scala是静态类型的
1 通过类型推断避免了冗余性2 通过模式匹配,组织和编写类型的新的方法获取了灵活性3 静态类型系统的经典优越性 1) 可检验属性 2) 安全的重构 3) 文档,静态类型是被编译器检查过的正确的程序文档...原创 2018-07-07 22:46:49 · 1776 阅读 · 0 评论 -
Scala编程 类和对象
1. public是Scala的默认访问级别2. Scala函数 1) 结果不需要return,使用结果表达式 2) 函数字面量 (x: Int, y: Int) => x + y3. Scala方法 1) Scala方法的任何参数都是val类型,不可在方法内部修改 2) 如果方法只是单个表达式,可以去掉{}括号,并可以放在def的同一行 ...原创 2018-07-07 23:26:52 · 190 阅读 · 0 评论 -
Scala编程 yield是如何工作的?
1 在scala中for表达式被翻译为map flatmap filter withfilter foreach 多重操作的组合语法糖https://docs.scala-lang.org/tutorials/FAQ/yield.html2 REPL read-evaL-print loop scala shell interface3 Call-By-Name按名参数使用=>,...原创 2018-07-20 09:25:10 · 598 阅读 · 0 评论 -
Scala 使用列表
Part1特征1 不可变,不可赋值更改列表元素2 递归结构,如链表3 同质的,所有元素类型相同4 协变,S是T的子类型,那么List[S]是List[T]的子类型5 空列表的类型是List[Nothing],Nothing是所有Scala类型的子类Part2构造1 基础块 Nil和:: 空列表+中缀操作符val nums = 1 :: (2 :: (3 :: (4 :: Nil)))Part3基本...原创 2018-07-14 15:33:46 · 382 阅读 · 0 评论 -
Scala编程 有状态的对象
纯函数式对象与有状态对象之间的本质差别1 对纯函数式对象调用方法或获取其字段的值,将得到同样的结果2 对于有状态的对象,方法调用或字段访问的结果取决于之前已经执行过的操作可能是有状态对象1 类中有var变量或者方法中存在有状态对象 重新赋值的字段1 非私有的var变量都有getter和setter,变量的修饰符隐藏是private[this]如var hour = 10 getter方法为hour...原创 2018-07-14 16:04:11 · 164 阅读 · 0 评论 -
Scala编程 注解
注解:添加到程序源代码中的结构化信息,易于机器处理把需要传递给工具的指令标示在源代码中提供对工具的支持meta-programming1 文档生成器可以得到指示,把某些方法在文档中标记为废除2 排版打印器可以得到指示,跳过已经被仔细手工格式化的程序3 未关闭文件检查器可以得到指示,忽略被人工验证关闭的特定文件4 副作用检查器可以得到指示,验证指定的方法是否有副作用注解语法1 @ val var d...原创 2018-07-14 20:02:40 · 179 阅读 · 0 评论 -
Scala编程 Lambda Expressions
val twice1: Double => Double = x => x * 2val twice2: Double => Double = _ * 2val twice3 = (x: Double) => x * 2val twice4 = (_: Double) * 2val lt1: (Double, Double) => Boolean = (x, y) =...原创 2018-07-12 13:51:54 · 1098 阅读 · 1 评论 -
Scala编程 函数
什么是Scala?1) Scala可以调用Java类库,被编译为Java字节码,运行在JVM上2) Scala主打函数式编程,同时也支持面向对象编程3) 两大特点是函数式编程和简单并发编程函数import java.util.Dateobject Functions { def main(args: Array[String]): Unit = { // 1 按名传递函数 ...原创 2018-07-05 17:18:31 · 218 阅读 · 0 评论 -
Scala编程 样本类和模式匹配
样本类case classScala编译器自动为样本类添加一些句法设定1 添加与类名一致的工厂方法 case class Var(s: String) 创建样本类的实例只需要 val v = Var("x"),不需要写val v = new Var("x")2 样本类的类参数都可以当作字段维护3 编译器为样本类添加了toString hashCode,equals方法模式匹配选择器 m...原创 2018-07-11 21:20:40 · 162 阅读 · 0 评论 -
Scala IntelliJ添加Scala SDK
1. 右键项目名称找到Open Module Settings2. 左侧Project Settings目录中点击Libraries3. 点击+new Project Library选择Scala SDK4. 添加下载好的jar文件夹原创 2018-06-11 20:52:23 · 29914 阅读 · 8 评论 -
Spark aggregate和combineByKey聚合操作
Aggregate(zeroValue)(seqOp, combOp)对于RDD{1,2,3,4},Aggregate( (6, 5) )( (x, y) => (x._1 + y), (x._2 + 1), (x,y) => (x._1 + y._1, x._2 + y._2))zeroValue既是seqOp的初始值,也是combOp的初始值1. 执行seqOpx = (6, 5)...原创 2018-06-14 01:47:38 · 547 阅读 · 0 评论 -
Scala IntelliJ常用快捷键
File -> Settings -> KeyMapALT+/ 自动提示方法Ctrl+/ 快速添加/取消注释,Ctrl+D 删除当前行Ctrl+M 窗口最大化和还原Ctrl+1 快速修正Ctrl+Alt+↓、Ctrl+Alt+↑复制当前行Alt+↑、Alt+↓ 上下两行交换位置Ctrl+Shift+O 快速生成importCtrl+Shift+F 规范代码 Ctrl+L 定位到当前编辑...原创 2018-07-02 09:51:23 · 4598 阅读 · 0 评论 -
Scala编程 STRING INTERPOLATION
val name = "James"println(s"Hello, $name") // Hello, JamesString Interpolation允许处理字符串字面量时插入变量引用三种用法:s, f, raw1 s允许直接在字符串中使用变量val name = "James"println(s"Hello, $name") // Hello, Jamesprintln(s"1 +...原创 2018-07-10 22:14:51 · 145 阅读 · 0 评论 -
Scala编程 操作符
这一章《Scala编程》翻译的晦涩了,看原版好点1 操作符实际是普通方法调用 1 + 2 和 (1).+(2)是一回事,因为Int类定义了+方法,可以看API2 任何方法都可以是操作符 只要把方法表示成操作符格式,s.indexOf('o')中indexOf不是操作符,但是 s indexOf 'o'中indexOf是操作符,因为使用了操作符的标注方式3 上面都是中缀操作符,也有前缀和...原创 2018-07-10 23:26:41 · 550 阅读 · 0 评论 -
Scala编程 Functional Objects
1 如果类没有主体,则不需要花括号class Rational(n: Int, d: Int)n和d是类参数,Scala编译器会创建带同样参数的主构造器primary constructor2 如果代码不在方法中,且不是字段,则Scala编译器会把这部分编译到主构造器中//因为把println放进了主构造器,所以每次创建新的Rational实例都会调用printlnclass Rational(...原创 2018-07-11 01:04:06 · 172 阅读 · 0 评论 -
Scala编程 控制结构
控制结构由if, try, for, match,while和函数调用if1 if控制结构可以产生值,三元操作符的行为与if一致,也被称为if, while和do...while控制结构不能产生值,结果类型是Unit,尽量减少使用while2 因为if可以返回值,代码可以如下优化var filename = "hellokitty"if(!args.isEmpty) filename = "...原创 2018-07-11 10:45:23 · 160 阅读 · 0 评论 -
Scala编程 函数和闭包
函数字面量1 函数字面量写成匿名函数,并当作值传递2 函数字面量被编译到类中,在运行时实例化,为函数值占位符语法1 如果参数在函数字面量中只出现一次,则可以把_当作参数的占位符2 每次函数被调用,_处用函数的参数来填入3 有时不指定类型会出错部分应用函数/偏应用函数1 不需要提供函数的所有参数2 使用_代替整个参数列表 someNumbers.foreach(println _) //等同于下方...原创 2018-07-11 11:35:32 · 166 阅读 · 0 评论 -
Scala编程 组合和继承
抽象类1 类如果有未实现的方法,则类就是抽象类,不能实例化,类名加abstract,方法名不加abstract无参数方法1 空括号方法 def hello(): Int =2 无参数方法 def hello: Int =3 无副作用使用无参数方法,有副作用使用空括号方法(因为使用括号可以显式告诉是个方法,内部有副作用)4 属性是字段还是方法不应该有影响,支持统一访问原则组合1 组合是指一个类持有另...原创 2018-07-11 16:42:24 · 290 阅读 · 0 评论 -
Scala编程 scala的层级
类型层级原始类型的实现1 使用和Java的原始类型一样的包装类,但是在Java中,比较非原始类型如果使用==,这个==是会比较二者引用的对象是否是同一个,在Scala中==即使是引用类对象比较,也只比较值,不是比较是否是同一个对象引用,如果要实现引用的比较,使用AnyRef定义的eq/ne底层类型Nullscala.Null和scala.Nothing是处理边界情况的特殊类型NUll类是null引...原创 2018-07-11 16:56:15 · 220 阅读 · 0 评论 -
Scala编程 包和引用
1 Scala采用了Java平台完整的包机制2 按需引用使用_,与Java的*相同的效果3 Scala的包是嵌套的4 可以把对象当作模块引用def showFruits(fruit: Fruit){ import fruit._ //引入对象参数的所有属性 println(name + ": " + color) //使用对象属性}5 import引用可以出现在任何地方6 可以使用简单名...原创 2018-07-11 19:47:44 · 507 阅读 · 0 评论 -
Scala编程 Extractor
1 抽取器是对象,需要定义unapply方法,可选地定义apply方法,apply方法称为注入方法,unapply方法称为抽取方法2 目的是为了匹配并分解值3 对偶关系调用Email.unapply(Email.applu(user, domain))返回 Some(user, domain)...原创 2018-07-14 22:11:13 · 167 阅读 · 0 评论