Scala重点语法整理

①定义函数
  1. def functionName ([list of parameters]):[return type]={
  2.  
  3. function body{}
  4.  
  5. return[expr]
  6. }
示例

  1. def fun1(a:String,b:Int):Unit={
  2.  
  3. println("nima")
  4.  
  5. }
②函数传入方法

  1. def time()={
  2. println("Getting time in nano seconds")
  3. System.nanoTime
  4. }
  5.  
  6. def delayed( t:=>Long)={
  7. println("In delayed method")
  8. println("Param: "+ t)
  9. }
  10.  
  11. def main(args:Array[String]):Unit={
  12. delayed(time()) //先执行delayed方法体,执行到t时才执行内部传入的time()方法
  13. }
  14. }
  15. /*
  16. In delayed method
  17. Getting time in nano seconds
  18. Param: 1117398067174855
  19. */
③递归函数,for循环中反复调用自身
④String* 是该字符串可变长度的
⑤函数的参数是默认的情况
  1. def addInt( a:Int=5, b:Int=7):Int={
  2. var sum:Int=0
  3.  
  4. sum = a + b
  5. return sum //执行时,缺省参数时,按照默认参数计算!!
  6. }
⑥柯里函数:柯里转换函数接受多个参数成一条链的函数,每次取一个参数。柯里函数是具有多个参数列表定义
  1. def main(args:Array[String]){
  2. val str1:String="Hello, "
  3. val str2:String="Scala!"
  4. println("str1 + str2 = "+ strcat(str1)(str2))
  5. }
  6. def strcat(s1:String)(s2:String)={
  7. s1 + s2
  8. }
⑦元组的使用
  1. def main(args:Array[String]){
  2. val t =(4,3,2,1)
  3. val sum =t._1 + t._2 + t._3 + t._4
  4. println("Sum of elements: "+ sum )
  5. }
单机用Scala的actor来写word count
  1. package cn.itcast.actor
  2. import scala.actors.{Actor,Future}
  3. import scala.collection.mutable.{HashSet,ListBuffer}
  4. import scala.io.Source
  5. /**
  6. * Created by root on 2016/5/11.
  7. */
  8. classTaskextendsActor{
  9. override def act():Unit={
  10. loop {
  11. react {
  12. caseSubmitTask(filename)=>{
  13. //局部统计, 结果是Map[String, Int]
  14. val result =Source.fromFile(filename).getLines().flatMap(_.split(" ")).map((_,1)).toList.groupBy(_._1).mapValues(_.size)
  15. sender !ResultTask(result)//发送ResultTask, 用它来包装result
  16. }
  17. caseStopTask=>{
  18. exit()
  19. }
  20. }
  21. }
  22. }
  23. }
  24. caseclassSubmitTask(filename:String)
  25. caseclassResultTask(result :Map[String,Int])
  26. case object StopTask
  27. object ActorWordCount{
  28. def main(args:Array[String]){
  29. val replySet =newHashSet[Future[Any]]()
  30. val resultList =newListBuffer[ResultTask]()//存储actor读取的内容
  31. val files =Array[String]("c://words.txt","c://a.txt")
  32. for(f <- files){
  33. val actor =newTask
  34. val reply = actor.start()!!SubmitTask(f)//启动, 并发送消息,返回Future

    !

    发送异步消息,没有返回值。

    !?

    发送同步消息,等待返回值。

    !!

    发送异步消息,返回值是 Future[Any]。

  35. replySet += reply //把这些Future放到集合中
  36. }
  37. while(replySet.size >0){
  38. val toCompute = replySet.filter(_.isSet)//取出有效的结果, 待处理的数据
  39. for(f <- toCompute){
  40. val result = f().asInstanceOf[ResultTask]//获取实例, 注意f后要加(), 调用apply(), 否则会报转换异常
  41. resultList += result
  42. replySet -= f
  43. }
  44. Thread.sleep(100)
  45. }
  46. //汇总的功能
  47. //List((hello, 5), (tom,3), (helllo, 2), (jerry, 2))
  48. val fr = resultList.flatMap(_.result).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
  49. println(fr)
  50. }
  51. }

D26 Scala增强相关推荐

  1. Java核心类库之(常用API、字符串类、集合类、泛型)

    目录 1 常用API 1.1 Math类 1.2 System类 1.3 Object类 1.4 Objects类 1.5 Arrays类 1.6 基本类型包装类 1.6.1 Integer类概述和使 ...

  2. 易观 CTO 郭炜:易观大数据架构的变迁

    今天跟大家分享易观大数据架构的变迁,包含三部分,第一先给大家讲易观的变化,也是易观产品技术的结果:第二是从技术角度来讲一下易观大数据技术架构的变迁:第三分享一点创新方向的心得. 在过去,大家谈起易观, ...

  3. js6的未来(二)函数增强

    js6的未来(二)函数增强 函数声明中的解构 JavaScript 的新解构赋值得名于数组或对象可以 "解构" 并提取出组成部分的概念.在 第 1 部分 中,学习了如何在局部变量中 ...

  4. PNaCl:Google通过LLVM增强对Chrome中原生应用的支持

    作者 Abel Avram ,译者 臧秀涛 发布于 五月 20, 2013 通过支持运行LLVM位码(bitcode),Google增强了对Chrome中原生应用的支持. 在Google I/O 20 ...

  5. scala学习笔记-基础语法(1)

    Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是JVM的一门编程语言.所有Scala的代码,都需要经过编译为字节码,然后交由Java虚 ...

  6. 干货!Java字节码增强探秘

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:美团技术团队 1. 字节码 1.1 什么是字节码? ...

  7. Scala入门到精通——第二十三节 高级类型 (二)

    本节主要内容 中置类型(Infix Type) 存在类型 函数类型 抽象类型 关于语法糖的问题,在讲解程序语言时,我们常常听到"语法糖"这个术语,在百度百科中,它具有如下定义: 语 ...

  8. Scala入门到精通——第十六节 泛型与注解

    本节主要内容 泛型(Generic Type)简介 注解(Annotation)简介 注解常用场景 1. 泛型(Generic Type)简介 泛型用于指定方法或类可以接受任意类型参数,参数在实际使用 ...

  9. scala学习笔记-集合操作(15)

    Scala的集合体系结构 1 // Scala中的集合体系主要包括:Iterable.Seq.Set.Map.其中Iterable是所有集合trait的根trai.这个结构与Java的集合体系非常相似 ...

最新文章

  1. 熬了一晚上,我从零实现了Transformer模型,把代码讲给你听
  2. 新冠图像数据分析论文集合(附链接)
  3. Linux时间矫正流程,Linux 时间矫正命令
  4. 图灵测试是不是已经Out了
  5. Spring Boot 自动配置的 “魔法” 是如何实现的?
  6. 【C/C++开发】C语言实现函数可变参数
  7. SSH详解以及免密登录配置,深入理解
  8. mybatis异常:Could not find result map ......... 问题分析及解决
  9. 按平均成绩排行c语言文件操作,学生成绩管理系统(c语言结构体以及文件操作)实验报告精选.doc...
  10. java虚拟机内存_java虚拟机内存区域的划分以及作用详解
  11. sqlserver入门
  12. python文本文件合并,python将多个文本文件合并为一个文本的代码(便于搜索)
  13. python股票行情接口实时获取股市数据
  14. Web端网页QQ临时会话在线咨询
  15. springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控
  16. python绘制分形图形教程_#python绘制分形图形教程#如何用Python绘制Circos图
  17. 5分钟搞定内网穿透工具-ngrok
  18. 搭建Ubuntu GPU服务器(宿主机篇)
  19. 地平线 J2J3了解笔记
  20. 白城师范学院计算机系鲍金玲,白城师范学院举办程序设计竞赛

热门文章

  1. 即构科技:一家聚集音视频通讯领域顶尖人才的公司
  2. 首次编译络达sdk时出现的问题
  3. 后门攻击阅读笔记,Graph Backdoor
  4. 发票查验小知识-发票开出后多久可以查真伪
  5. Linux次级代谢物分析,9大验证,精准靶向代谢组学技术对植物各部分次级代谢产物分析研究...
  6. 解决问题的底层逻辑:定义问题、挖掘本质、找到真正问题
  7. 华为手机有线共享网络_华为手机怎么投屏到电视?这2个方法又快又简单
  8. 都知道私域流量很重要,请直接告诉我们,该怎么开干吧
  9. 编写程序求出ax^2+bx+c的解并指出方程的实根
  10. 【CVPR 2019】Semantic Image Synthesis with Spatially-Adaptive Normalization(SPADE)