1. 变量的声明
scala有两种变量:
val和var,val相当于Java中的final变量,一旦被赋值就不能修改。
var相当于java中的普通变量,其值可变
constant为定义常量的关键字
指定类型声明变量:
2. scala的常用类型和条件表达式
Scala的数值类型有7种:(无引用类型)Byte、Char、Short、Int、Long、Float和Double
1个Boolean类型
Java中的void类型对应scala中的Unit
条件表达式的使用参考:如何在Scala中使用条件表达式
3. for循环
scala之for循环参考:Scala之for循环
for推导式:
4. 方法和函数的声明以及方法转换为函数
参考: Scala方法定义,方法和函数的区别,将方法转换成函数
定义方法:
定义函数:
将方法转换成函数(神奇的下划线):
5. 数组
参考:scala学习笔记-Array、ArrayBuffer以及遍历数组(7)
数组转换:
6. 映射
参考:scala-映射map
映射是键/值对偶的集合。对偶是元组(tuple)的最简单形态——元组是不同类型的值的聚集。
7. 元组
8. scala集合之seq、set、map
9.scala Lazy关键字
当val被声明为Lazy时,它的初始化将被推迟,直到我们首次对它取值
10. scala函数式编程
函数式编程之reduce
函数式编程之fold
函数式编程之aggregate
scala实现wordCount
scala算子综合案例(一)----- wordcount的多种实现
11.面向对象和模式匹配
apply方法:
12. scala柯里化
柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
深入理解scala的柯里化( currying or curry )以及其用处
13. 隐式转换和隐式函数
14.泛型
15. scala中的Actor
package ActorTest
import scala.actors.{Actor, Future}
/**
* 用Actor实现同步和异步的消息发送和接收
*/
class ActorDemo3 extends Actor {
override def act(): Unit = {
while (true) {
receive {
case "start" => println("starting")
case AsyncMsg(id, msg) => {
println(s"id: $id, AsyncMsg: $msg")
Thread.sleep(2000)
//发送消息
sender ! ReplyMsg(5, "success")
}
case SyncMsg(id, msg) => {
println(s"id: $id, SyncMsg: $msg")
Thread.sleep(2000)
//发送消息
sender ! ReplyMsg(5, "success")
}
}
}
}
}
object ActorDemo3{
def main(args: Array[String]): Unit = {
val actorDemo3 = new ActorDemo3
actorDemo3.start()
//异步发送消息,没有返回值
actorDemo3 ! AsyncMsg(1, "Hi~ AsyncMsg no res");
println("没有返回值地异步消息发送完成")
//同步发送消息,线程等待有返回值
val resContent = actorDemo3 !? SyncMsg(2, "Hi~SyncMsg")
println("有返回值的同步消息发送完成")
println("返回值 :" + resContent);
//异步发送消息,有返回值,返回类型是Future[Any]
val replyRes: Future[Any] = actorDemo3 !! AsyncMsg(3, "Hi~ AsyncMsg has res")
//等待一会,获取返回值,否则获取到的是none
Thread.sleep(5000);
if (replyRes.isSet){
println(replyRes.apply())
}else{
println("none")
}
}
}
case class AsyncMsg(id: Int, msg: String)
case class SyncMsg(id: Int, msg: String)
case class ReplyMsg(id: Int, msg: String)
Scala Actor,receive不断接收消息,react复用线程,结合case class的actor,Future使用,使用Actor进行wordCount
16.Akka
scala学习书籍推荐:《快学scala》