![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
scala
文章平均质量分 72
海牛大数据_青牛老师
【海牛大数据】创始人
展开
-
scala 系列之 20akka 的 actor 并发编程
24 Akka24.1 Akka 概述 Spark的RPC是通过Akka类库实现的,Akka用Scala语言开发,基于Actor并发模型实现; Akka具有高可靠、高性能、可扩展等特点,使用Akka可以轻松实现分布式RPC功能。 Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换消息的方式进行通信,每个Actor都有自己的收件箱(MailBox)。 通过Actor能够简化锁及线程管理,可以非常容易地开发出正确地并发程序和并原创 2021-07-09 14:47:30 · 681 阅读 · 0 评论 -
scala 系列之 19scala 的 actor 并发编程
23 Actor 并发编程模型23.1 Actor概述为什么要学习actor?我们现在学的Scala Actor是Scala 2.10.x版本及以前版本的Actor;Scala在2.11.x版本中将Akka加入其中,作为默认的Actor,老版本的Actor已经废弃;我们学习Actor的目的就是为了学习Akka做铺垫;什么是Actor?Actor是消息并发模型;Scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制。Scala是运用消息(message)的发送、接收来原创 2021-07-09 14:46:14 · 325 阅读 · 0 评论 -
scala 系列之 18scala 泛型
22 泛型泛型就是不确定的类型,可以在类或方法不确实传入类型时使用,可以提高代码的灵活性和复用性;scala中泛型的用法和java中差不多,但是会有一些自己独特的语法;泛型类:指定类可以接受任意类型参数。泛型方法:指定方法可以接受任意类型参数。22.1 泛型类基本用法package day04import day04.SexEnumObj.SexEnum// 定义带有泛型的抽象类abstract class FXDemo[T](val t : T) { def printInfo():原创 2021-07-09 14:42:15 · 288 阅读 · 0 评论 -
scala 系列之 17scala 隐式转换
21 隐式转换作用:能够丰富现有类库的功能,对类的方法进行增强,常用作类型转换也就是把一个类型转赋予另一个类的功能;隐式转换应用场景隐式转换函数、隐式值、隐式参数、隐式对象(只能在静态对象中使用);21.1 隐式转换函数隐式转换函数 是指 以implicit关键字声明并带有单个参数的函数,这样的函数被自动应用。// 声明隐式函数,用于将 int类型转成 String 类型implicit val int2Stringfunc = (a:Int) => a.toString使用示例:原创 2021-07-09 14:38:30 · 171 阅读 · 0 评论 -
scala 系列之 16scala 的柯理化
20 柯理化 柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。是把接受多个参数的函数变成接受一个参数的函数;柯理化的两种表现形式:以 加法函数为例: def curring(x:Int)(y:Int) = x + y def curring(x:Int) = (y:Int) => x + y在柯理化形式的基础上,固定一个参数,传入一个参数scala> de原创 2021-07-09 14:32:40 · 164 阅读 · 0 评论 -
scala 系列之 15scala 高阶函数和部分参数函数
18 高阶函数在数据和计算中,高阶函数是至少满足下列一个条件的函数: 1)接受一个或多个函数作为输入 2)输出一个函数输出一个函数// 输出Int类型scala> def add(a:Int, b:Int) = a + badd: (a: Int, b: Int)Int// 输出函数Int => Intscala> def add(a:Int, b:Int) = (c:Int) => a + b + cadd: (a: Int, b: Int)In原创 2021-07-09 14:15:05 · 171 阅读 · 0 评论 -
scala 系列之 14scala 抽象类和特质
17 抽象类(abstract class)与 特质(trait)抽象类: 抽象类与Java相似,只是Java中没有属性的抽象,scala可以有属性的抽象;特质: 可以把特质理解成Java中升级版的接口 在Java中接口不能声明没有值的属性和有实现的方法,而Scala可以声明没有值的属性和有实现的方法;重写: 重写与Java相似,只是Java中没有重写属性的概念,而 scala 可以重写属性;特质和抽象类的使用区别: 只能继承一个抽象类,但可以实现多原创 2021-07-09 11:40:22 · 321 阅读 · 1 评论 -
scala 系列之 13scala 样例类和样例对象
16 样例类和样例对象样例类在class 前加上 case 关键字,这样的类称为样例类。默认实现了Serializable接口,可以封装数据。scala 为每一个样例类自动生成一个伴生对象,在该伴生对象中自动生成的模板代码包括:1)一个apply 方法,实例化该类的时候无需使用new 关键字;2)一个unapply 方法,该方法包含一个类型为伴生类的参数,返回结果是Option 类型; 对应的类型参数是N元组,N是伴生类中主构造参数的个数; unapply 方法用于对对原创 2021-07-09 11:38:02 · 338 阅读 · 1 评论 -
scala 系列之 12scala 的 apply 和 unapply 方法
15 apply和unapply方法apply、unapply方法都被隐式的调用apply方法: 1)在一个类的伴生对象中定义apply方法,在生成这个类的对象时,就省去了new关键字。 2)apply方法的参数列表不需要和构造函数的参数列表统一,也就是说apply 方法支持重载。 3)apply 方法可以通过主构造器和辅助构造器new对象; 4)apply方法 定义在object 里,是创建对象;如果定义在class 里,是获取对象的数据;apply方法定义在原创 2021-07-09 11:36:27 · 229 阅读 · 0 评论 -
scala 系列之 11scala 模式匹配
14 模式匹配14.1 match 语句match 语句用在当需要从多个分支中进行选择的场景,类似于java 中的switch 语句。语法:变量 match{ case "值" => 语句块1 // 语句块后不用加break case "值2" => 语句块2 case _ => 语句块N // 类似于java的default}其中:1)case 后面的表达式可以是任何类型的常量,如字段串、类、元组、集合等;2)与java的switch不原创 2021-07-09 11:32:42 · 90 阅读 · 0 评论 -
scala 系列之 10scala 的 private 关键字
13 private关键字总结修饰class1、在class前面使用private可以被相同包(包含递归子包)访问(能引入类);2、在class前面使用private[包名]代表是包的访问权限,只能指定的包名和子包(包含递归子包)下才能访问;private修饰 主构造器、主构造器参数、辅助构造器、属性、方法, 当前类和伴生对象可以访问,其他对象不能访问;private[this]修饰 主构造器、主构造器参数、辅助构造器、属性、方法, 只有当前类可以访问;private[包名] 修饰 主构造器、主原创 2021-07-09 11:23:11 · 842 阅读 · 1 评论 -
scala 系列之 09scala 单例对象和伴生对象
11 单例对象在scala中没有像java一样的static关键字;在scala中是没有静态方法和静态字段的,但是可以使用object关键字加类名的语法结构实现同样的功能;在scala中用object修饰的为单例对象,单例对象中主要存放常量和工具方法;上面代码通过反编译发现:结论: 可以利用这一点来实现初始化逻辑。定义单例对象,实现连接池的操作, 提供获取可用连接个数、获取连接、释放连接package day03import scala.collection.mutable.ArrayB原创 2021-07-09 11:19:33 · 191 阅读 · 1 评论 -
scala 系列之 08scala 类和构造器
9 类 类和对象是Java、C++等面向对象编程的基础概念。类是用来创建对象的蓝图。定义好类以后,就可以使用new关键字来创建对象。 scala 如果不写权限修饰符,默认是public。 一个类文件可以声明多个类;定义语法://模板类class 类名{}//单例对象--使用main(), 来测试object 类名{}其中: 类中可以放属性、方法、函数; 类中属性的定义和变量的定义一样,用val 或 var 进行定义,默认权限是pub原创 2021-07-09 11:11:51 · 200 阅读 · 0 评论 -
scala 系列之 07scala 集合常用方法和函数操作
8 集合常用方法和函数操作foreachoreach 方法的原型:// f 返回的类型是Unit, foreach 返回的类型是Unitdef foreach[U](f: Elem => U)该方法接受一个函数 f 作为参数, 函数 f 的类型为Elem => U,即 f 接受一个参数,参数的类型为容器元素的类型Elem,f 返回结果类型为 U。foreach 遍历集合的每个元素,并将f 应用到每个元素上。**sorted、sortBy**sorted:**按照元素自身进行排原创 2021-07-09 11:07:48 · 280 阅读 · 1 评论 -
scala 系列之 06scala 懒加载 lazy
7 懒加载 lazy惰性变量用法放在不可变变量之前;只有在调用惰性变量时才会去实例化这个变量,类似于java中单例模式的懒汉模式;作用:是将推迟复杂的计算,直到需要计算的时候才计算,而如果不使用,则完全不会进行计算。//没有lazy关键字的时候object LazyDemo { def init():Unit = { println("init") } def main(args: Array[String]): Unit = { val p = init()原创 2021-07-09 10:59:09 · 226 阅读 · 0 评论 -
scala 系列之 05scala 数据结构
6 数据结构 在scala 编程中经常需要用到各种数据结构,比如数组(Array)、元组(Tuple)、列表(List)、映射(Map)、集合(Set)等。 Scala同时支持可变集合和不可变集合,不可变集合从不可变,可以安全的并发访问; 不可变集合:scala.collection.immutable 可变集合: scala.collection.mutable Scala优先采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变和不可变的版本;原创 2021-06-11 15:44:22 · 452 阅读 · 0 评论 -
scala 系列之 04scala 方法和函数
5 方法与函数5.1 方法在scala中的操作符都被当成方法存在,比如说+、-、*、/1+2就是1.+(2)的调用,2.0 是doule类型,强调用Int类型的写法为1.+(2:Int)可以在idea中搜索Int类查看支持的方法方法声明与使用定义方法的语法:def 方法名([变量:变量类型,变量:变量类型]):返回值类型={方法体}其中: 在scala 中,方法里面的最后一个表达式的值就是方法的返回值,不需要return 返回;示例:定义无参无返回值的方法://原创 2021-06-11 15:42:52 · 306 阅读 · 1 评论 -
scala 系列之 03scala 控制结构
4 控制结构4.1 if 条件表达式if 语句用来实现两个分支的选择结构,语法如下:if(表达式1){ 语句块1}else if(表达式2){ 语句块2}else{ 语句块3}运行逻辑和java相同,这块内容省略。与java 不同的是, scala 可以通过if 语句实现 java 三目运算符的逻辑;4.2 while 循环scala 拥有与java相同的while、do while 循环。x = 1while(x <= 10){ print原创 2021-06-11 15:41:45 · 176 阅读 · 0 评论 -
scala 系列之 02scala 数据类型、变量、操作符、语句
3 数据类型、变量、操作符、语句3.1 基本数据类型scala 的基本类型有 8 种:Byte、Char、Short、Int、Long、Float、Double、BooleanScala中没有基本数据类型的概念,所有的类型都是对象。如上图所示:**Anyval:**代表所有基本类型。**AnyRef:**代表所以引用类型,包括 Scala class 和 Java class。**Any:**是所有类的超类。如果不知道表达式的结果是什么类型可以用Any。**Unit:**只有一个实例值原创 2021-06-11 15:40:29 · 1072 阅读 · 0 评论 -
scala 系列之 01scala 概述和开发环境搭建
1 scala介绍 Scala是一门现代的多范式编程语言,平滑地集成了面向对象和函数式语言的特性,旨在以简练、优雅的方式来表达常用编程模式。 Scala的设计吸收借鉴了许多种编程语言的思想,只有很少量特点是Scala自己独有的。 Scala语言的名称来自于“可伸展的语言”,从写个小脚本到建立个大系统的编程任务均可胜任。 大教堂:几近完美的建筑物,花费很长时间建设,而一旦建成了就长时间保持不变; 集市:每天都会被集市中的人调整和扩展。 Scala就原创 2021-06-11 15:37:49 · 1161 阅读 · 0 评论