文档章节

scala高级

泡海椒
 泡海椒
发布于 2016/04/18 07:28
字数 1253
阅读 34
收藏 1

-space: normal; widows: 2; word-spacinScala语言入门
注解
能被编译器或外部工具处理的一些信息
Actor和并发
一种便于使用的并发模型,是scala用于大数据处理的结构基础

-webkit-text-stroke-width: 0px; ">注解
为什么使用注解
注解语法
注解举例

variant: normal; font-weight: normal; 为什么使用注解
注解的是在编译和运行之外,对程序进行的操作
自动生成文档
在生成文档时自动排版
代码的错误检查与忽略
注解的实质是一个标签,插入到代码中标志元编程工具对该段代码使用
Java的注解并不影响编译器的运行,但Scala的注解会,如@BeanProperty
可以自行编写新的元编程工具

er-spacing: normal; line-height: norma注解语法
Scala可以为任意的结构代码甚至是参数添加注解
@deprecated def Sum() = { ... } //为方法添加注解
@deprecated class IntStack { ... } //为类添加注解
def check(@NotNull password:String) //为参数添加注解
Scala支持多注解,且注解次序没有影响
@BeanProperty @Id var username = _
部分注解需要引入参数,Scala支持任意类型作为注解参数
@Test( timeout = 100 ) def testA() = { ... }

ng: normal; line-height: normal; orpha注解语法
给主构造器添加注解时,需要将注解放置在构造器之前,并加上一对圆括号
class Credentials @Inject() (var username: String, var password: String)
为表达式添加注解,在表达式后加上冒号,然后是注解
(myMap.get(key): @unchecked) match { ... }
为类型参数添加注解
class MyContainer[@specialized T]
针对实际类型的注解应放置在类型名称之后
String @cps[Unit]

ng: normal; line-height: normal; orpha注解语法
给主构造器添加注解时,需要将注解放置在构造器之前,并加上一对圆括号
class Credentials @Inject() (var username: String, var password: String)
为表达式添加注解,在表达式后加上冒号,然后是注解
(myMap.get(key): @unchecked) match { ... }
为类型参数添加注解
class MyContainer[@specialized T]
针对实际类型的注解应放置在类型名称之后
String @cps[Unit]

2; word-spacing: 0px; -webkit-text-siz注解举例
生成跳转表 @switch
(m : @switch) match {
case 0 => ...
case 1 => ...
case 2 => ... }
基本类型特殊化 @specialized
def sum[@specialized(Int , Double) T] = { ... }

ws: 2; word-spacing: 0px; -webkit-textActor与并发
并发
actor
创建与使用
消息的传递
线程的使用
actor风格
应用实例

pacing: normal; line-height: normal; o并发
什么是并发
将一个计算任务,分成几个小的部份,让它们同时被计算,之后再汇整计算结果
常见的并发结构
多线程,分布式计算,消息传递,资源共享(内存共享)
常用的并发模型
参与者模式
Petri网
通信顺序进程

Actor
参与者模式Actor model
当一个参与者接收到一则讯息,它可以做出一些决策、建立更多的参与者、传送更多
的讯息、决定要如何回答接下来的讯息
Scala使用Actor作为其并发编程模型
一种基于消息传递而非资源共享的并发模型,能尽可能避免死锁和共享状态
actor可以理解为虚拟线程,能实现线程的复用,从而产生数百上千的actor并有效控制
系统开销
Scala在2.10.0版本之后在自带Akka类库作为其Actor推荐实现
Akka是使用Scala编写的实现Actor模型的一个类库
 

normal; widows: 2; word-spacing: 0px; Actor
使用actor需要引入Scala的Actor类库
import scala.actors.Actor
import akka.actor.Actor
继承Actor以使用
class HI extends Actor
object HELLO extends Actor
利用actor方法声明使用
val hi = actor { receive { ... } }
val hello = Array.fill()( actor { react { case _ => } } )

Actor
消息传递是Actor的核心
使用!向actor发送信息
actor使用receive接收信息
msg代表actor当前接收到的信息
对于信息,actor往往使用模式匹配来进行处理,而对于消息的发送者而言,其并不关
心actor接收到信息后如何处理,更不期待actor对该信息有返回,当消息发送后,发送
者便处理下一步
receive方法的参数有各种case语句组成,receive方法获取到消息后依次传递给其参数
,那么,receive方法的case语句需要考虑所有情况吗?

style=" font-style: normal; font-variActor
actor通过react实现线程的复用
receive从线程池获取一个线程并一直使用,react从线程池获取一个线程,使用完释放
def act( ) { react { ... } }
actor(Scala.Actor)的主体为act方法,act方法不能被外部显式调用
actor的act方法在start后启动,act方法本身并不会自动获取线程
在act方法里只能获取一次线程
在以下情况下actor终止执行act方法
act方法返回
act方法由于异常被禁止
actor调用exit方法

spacing: 0px; -webkit-text-size-adjustActor使用原则
避免共享
不调用方法
足够简单
异步调用
使用react
容错




© 著作权归作者所有

上一篇: spark安装
下一篇: scala高阶函数
泡海椒
粉丝 11
博文 282
码字总数 288344
作品 0
成都
程序员
私信 提问
加载中

评论(1)

Scala类型系统——高级类类型(higher-kinded types)

高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors)。它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它函数作为参数的函数;高...

Barudisshu
2016/06/13
948
0
Scala入门到精通——第三十节 Scala脚本编程与结束语

摘要: 本节主要内容 REPL命令行高级使用 使用Scala进行Linux脚本编程 结束语 1. REPL命令行高级使用 在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,...

阿里云云栖社区
2018/06/26
22
0
scala字符串插入

scala的字符串插入,与java语言的有类似之处,都是最终用字符串变量去替代字符串中的。Scala中主要有,,三种字符串插值用法,另外还有一些高级用法,本文主要参考官网字符串插入。 s用法 f用法...

high_m
2017/11/05
0
0
notepadd++配置Scala运行环境

Window7 下 notepadd++配置Scala运行环境 1、安装notepad++ 2、在notepad++中安装nppexec插件 3、下载Scala最新版,解压到某目录,在环境变量中加入 SCALA_HOME,在控制台验证 scala 4、在not...

qingfeng哥
2014/07/02
3.1K
0
Scala入门与进阶(一)- 初始Scala

1.初识Scala 1.1 Scala概述 Scala 是整合了面向对象和函数式边恒的高级编程语言。他的一些静态类型能够帮助我们在一些复制的应用程序里面避免到很多bug,并且他的JVM和JavaScript运行环境可以...

Meet相识_bfa5
2018/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部