赞
踩
定义变量或者常量的时候,也可以写上返回的类型,一般省略,如: val a:Int = 10
变量:在程序运行过程中其值可能发生改变的量叫做变量。
常量:在程序运行过程中其值不会发生变化的量叫做常量。
在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。
如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错。
变量 :用 var 定义 ,可修改
常量 :用 val 定义,不可修改
算术运算符
关系运算符
大于 (A > B) 运算结果为 false
= 大于等于 (A >= B) 运算结果为 false
逻辑运算符
位运算符
赋值运算符
range
to
until
step
普通for循环
多层for循环
判断for循环
for循环与yield
for {子句} yield {变量或表达式}
,原来的集合不会被方法的定义
Scala 使用 def 关键字告诉编译器这是一个方法。
返回值类型与返回值
函数的定义
Scala的函数是基于Function家族,0-22,一共23个Function Trait可以被使用,数字代表了Funtcion的入参个数
Java里只有方法都能适应一切需求,那scala又提出函数的概念肯定有意义。
方法与函数
Scala 有方法与函数,二者在语义上的区别很小
Scala 方法是类的一部分,而函数是一个对象 对象的引用可以赋值给一个变量。换句话来说在类中定义的函数即是方法
Scala 中使用 val 语句可以定义函数,def 语句定义方法
方法和函数的区别
当函数定义在类中,就表示方法,其他的都称为函数
函数可以作为一个参数传入到方法中,而方法就不行
函数必须要有参数列表,而方法可以没有参数列表
如果我们直接把一个方法赋值给变量会报错,(Missing arguments for methodmethod01(Int,Int))
创建数组的两种方式
数组遍历的两种方式(for–foreach)
创建二维数组
创建
遍历
可变长度数组
数组复杂应用
合并数组
合并数组 并将右边的类型作为最终结果返回.最后c为LinkList类型
在数组前添加一个元素,数组在哪冒号在哪
对数组中所有的元素进行相同的操作
取出指定索引处得元素
判断两个对象是否可以进行比较
创建一个副本,不是引用,是深拷贝
构造器
属性
object由来
在 Scala 中,是没有 static 这个东西的,但是它也为我们提供了单例模式的实现方法,那就是使用关键字 object。
Scala 中使用单例模式时,除了定义的类之外,还要定义一个同名的 object 对象,它和类的区别是,object对象不能带参数。
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。
在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。
类和它的伴生对象可以互相访问其私有成员。
scala 中的 object 是单例对象,相当于 java 中的工具类,可以看成是定义静态的方法的类。object 不可以传参数。
Scala 使用 extends 关键字来继承一个类。Scala 只允许继承一个父类。
概述
trait中带属性带方法实现
trait中带方法实现
特征构造顺序
特征也可以有构造器,由字段的初始化和其他特征体中的语句构成。这些语句在任何混入该特征的对象在构造时都会被执行。
构造器的执行顺序
构造器的顺序是类的线性化的反向。线性化是描述某个类型的所有超类型的一种技术规格
概述
private
protected
public
作用域保护
Scala中,访问修饰符可以通过使用限定词强调
这里的x指代某个所属的包、类或单例对象。
如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。
在 scala 中只需要导入对应的包,比 java 还要简单不需要实例化对象
例
符号 含义
%d 十进制数字
%s 字符串
%c 字符
%e 指数浮点数
%f 浮点数
(=>)
表示函数的返回类型(Function Type)
匿名函数
case语句
By-Name Parameters(传名参数)
下划线(_)
作为通配符,类似Java中的*
:_*作为一个整体,告诉编译器你希望将某个参数当做参数序列处理
指代一个集合中的元素
在元组中,可以用方法1,2,_3访问组员, _
使用模式匹配可以用来获取元组的组员,例如
下划线_代表的是某一类型的默认值.
复杂操作符
::
:+ 和 +:
:::
++
Scala 可以为函数参数指定默认参数值,使用了默认参数
Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。
可以将匿名函数返回给val定义的值
匿名函数不能显式声明函数的返回类型
就是操作其他函数的函数
可以使用其他函数作为参数,或者使用函数作为输出结果
柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。
新的函数返回一个以原有第二个参数为参数的函数。
可以理解为高阶函数的简化
集合
scala.collection 中的所有集合。这些都是高级抽象类或特征,通常具有可变和不可变的实现
scala.collection.immutable中的所有集合。不变的
scala.collection.mutable中的所有集合。可变的
Trait Traversable
Trait Iterable
容器(collection)结构的上层还有另一个trait。这个trait里所有方法的定义都基于一个抽象方法,迭代器(iterator,会逐一的产生集合的所有元素)
foreach是Traversable所有操作的基础,所以它的性能表现很关键
Iterable有两个方法返回迭代器:grouped和sliding。这些迭代器返回的不是单个元素,而是原容器(collection)元素的全部子序列
Trait Seq
Seq trait用于表示序列
常见操作
索引和长度的操作 (apply、isDefinedAt、length、indices、lengthCompare)
索引检索操作(indexOf、lastIndexOf、indexofSlice、lastIndexOfSlice、indexWhere、lastIndexWhere、segmentLength、prefixLength)
加法运算(+:,:+,padTo)
更新操作(updated,patch)
排序操作(sorted, sortWith, sortBy)
反转操作(reverse, reverseIterator, reverseMap)
比较(startsWith, endsWith, contains, containsSlice, corresponds)
多集操作(intersect, diff, union, distinct)
trait Seq 具有两个subtrait LinearSeq和IndexedSeq。
Trait Set
集合是不包含重复元素的可迭代对象
可变集合和不可变集合提供了+和++操作符来添加元素,-和–用来删除元素
目前可变集合默认使用哈希表来存储集合元素,非可变集合则根据元素个数的不同,使用不同的方式来实现
集合的两个特质是 SortedSet 和 BitSet.
Trait Map
简介
Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同
构造列表的两个基本单位是 Nil 和 ::
Scala列表有三个基本操作
创建list
一维
二维
list遍历
list方法举例
filter :过滤元素
count :计算符合条件的元素个数
map :对元素操作
flatmap :压扁扁平,先map再flat
可变长度List
val listBuffer = ListBufferInt
简介
Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的。
Scala 集合分为可变的和不可变的集合。
默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用scala.collection.mutable.Set 包。
Scala集合有三个基本操作
创建Set
遍历Set
Set方法举例
可变长度Set
简介
创建Map
获取Map的值
遍历Entry
for
foreach
遍历key
遍历value
合并Map
Map方法举例
可变长度Map
定义
创建元组
遍历元组
元组的简单方法
Scala Option(选项)类型用来表示一个值是可选的(有值或无值)
Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None
getOrElse() 方法来获取元组中存在的元素或者使用其默认的值
isEmpty() 方法来检测元组中的元素是否为 None
偏函数(Partial Function),是一个数学概念它不是"函数"的一种, 它跟函数是平行的概念。
Scala中的Partia Function是一个Trait,其的类型为PartialFunction[A,B],其中接收一个类型为A的参数,返回一个类型为B的结果
{
case 1=>“hello world 1”
case 2=>"hello world 2
}
如果一个方法中没有 match 只有 case ,这个函数可以定义成 PartialFunction偏函数
偏函数定义时,不能使用括号传参,默认定义 PartialFunction 中传入一个值,匹配上了对应的case ,返回一个值,只能匹配同种类型
一个 case 语句就可以理解为是一段匿名函数。
isDefinedAt
orElse
andThen
applyOrElse
case class是一种可以用来快速保存数据的类,可以认为是java中的pojo类,用于对象数据的保存
默认实现方法
apply :
unapply :
getter /setter :
toString : equals : hashCode : copy
隐式转换是在 Scala 编译器进行类型匹配时,如果找不到合适的类型,那么隐式转换会让编译器在作用范围内自动推导出来合适的类型
隐式的使用方式
Scala支持两种形式的隐式转换
隐式转换函数是指在同一个作用域下面,一个给定输入类型并自动转换为指定返回类型的函数,这个函数和函数名字无关,和入参名字无关,只和入参类型以及返回类型有关
隐式转换为目标类型:把一种类型自动转换到另一种类型
隐式转换调用类中本不存在的方法
简介
注意点
具体写法
隐式参数
注意点
具体写法
Actor发送接收消息
Actor与Actor之间通信
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。