For与Function进阶实战、Lazy的使用

一、for循环的进阶实战

Def main=(args:Array[String]):Unit{

For(i<- 1 to 3;j<- 3 to 8)

Println((100*i+j)+” ")

也可在for循环中加入条件表达式:

For(i<- 1 to 3;j<- 3 to 8  if i!=j)

Println((100*i+j)+” ")

}

定义函数的时候一般函数都有值,函数可以作为函数的参数去赋值

def  Adsds(x: int) =x+100

val add=(x: int) => x+200

二、Function的进阶实战

三、Lazy延迟加载和延迟执行

1、For&Function进阶

(1)For 使用

def main(args: Array[String]): Unit = {    for (i <- 1 to 2; j <- 1 to 2 if i != j)  //将1到2的集合每次循环赋值给i,将1到2的集合每次循环赋值给j,如果i!=j,就输出当i=1,j=2结果为102,当i=2,j=1结果是201      println((100 * i + j) + " ")}

运行代码得到如下结果:102  201

我们看到与Java不同的是,代码i,j都没有进行申明类型,它可以根据右侧类型元素自动进行类型推导。类型推导是Scala中非常强大的一个内容。

(2)Function函数使用

函数有值是scala中的非常重要的特点,因为函数有值,函数执行必然有结果,所以函数可以作为函数的参数去传递,这是一个非常重要的结论,这个结论导致了函数式编程很多重要的技巧。

def addA(x: Int) = x + 100

//定义函数addA,它的参数类型是整数,因为函数有值,所以一般有=号,=号右侧是函数计算过程println("The result from a function is :" + addA(2))

匿名函数-是函数最常见的一种形态,因为Scala里只关注函数怎么做,不关注它的名字

def main(args: Array[String]): Unit = {    val add = (x: Int) => x + 200          //将匿名函数的值赋值给常量add,=>是将接收的整数类型去加200    println("The result from a val is " +  add(2)) }

函数返回值一般不指定,Scala会自动推导,但递归函数除外,因为递归函数并不知道上一次计算返回的什么样的结果

//这里是求斐波那序列的值def main(args: Array[String]): Unit = {    def fac(n:Int): Int = if (n <= 0) 1 else n * fac(n - 1) //这里可以看到返回类型是int,如果不指定会报错     println("The result from  a fac is : " + fac(10) )}

有默认参数的函数

//content参数被默认为I love Sparkdef main(args: Array[String]): Unit = {    def combine(content: String, left: String = "[", right: String = "]") = left + content + right    println("The result from a combine is : " + combine("I love Spark", "@", "@"))}

参数可变的函数

//通过*表示可以输入多个参数,即参数可变.这里将传入的参数累加,赋值给resultdef main(args: Array[String]): Unit = {      def connected(args: Int*) = {          var result = 0          for(arg <- args) result += arg          result      }     println("The result from a connected is : " + connected(1,2,3,4,5) )     println("The result from a connected is : " + connected(1,2,3,4,5,6) )}

2、lazy懒加载

如果在E盘下不存在test.txt, 使用 Source.fromFile()函数读取文件,就会报错抛出异常, 但是如果引用的变量或常量前加上 lazy,它只有在第一次被使用时,才被实例化,lazy会延迟执行。当发生错误,但没有立即被使用,程序还是OK,只有在被使用才会报错,懒加载的意义在于延迟执行,可以看到一个计算的更多步骤,优化的范围更大,优化的力度也更大。

例如我们在java中,一个错误就可能让我们的后边的工作无法进行,而延迟执行,可以放任这个错误,继续后边的工作,再从整体的逻辑里再去优化解决这个错误,会更好。

import scala.io.Sourceobject Test {  def main(args: Array[String]): Unit = {    lazy val file = Source.fromFile("e:\\test.txt")    println("Scala");//    for (line <- file.getLines()) {//      println(line);//    }  }}

转载于:https://blog.51cto.com/10596633/1683865

scala-04For与Function进阶实战、Lazy的使用相关推荐

  1. For与Function进阶实战、Lazy的使用笔记总结

    本期内容: 1:For循环的进阶实战,(更多的实战代码) 2:Function进阶实战,(Function更多的定义和实现方式) 3:Lazy的使用,(延迟加载) For循环常用: for(i < ...

  2. MySQL的进阶实战篇

    关联文章: MySQL的初次见面礼基础实战篇 MySQL的进阶实战篇 本篇上一篇博文MySQL的初次见面礼基础实战篇的延续,是mysql的进阶内容的记录,本篇主要知识点如下: 进阶实战篇 进阶实战篇 ...

  3. 聊天机器人落地及进阶实战 | 公开课速记

    嘉宾 | 邵浩 编辑 | suiling 来源 | AI科技大本营在线公开课 近年来,聊天机器人技术及产品得到了快速的发展.聊天机器人作为人工智能技术的杀手级应用,发展得如火如荼,各种智能硬件层出不穷 ...

  4. 今晚8点直播 | 详解聊天机器人落地及进阶实战

    近年来,聊天机器人技术及产品得到了快速的发展.聊天机器人作为人工智能技术的杀手级应用,发展得如火如荼,各种智能硬件层出不穷. 本次公开课中,AI科技大本营联合电子工业出版社博文视点邀请到上海瓦歌智能科 ...

  5. 《大型网站技术架构》《K8S进阶实战》等书籍!送45本!读完工资多个0!

    学习如逆水行舟,不进则退.所以又来给各位读者送书了,这次送45本技术书,内容涉及深度学习.Python.Dubbo.Flutter等. 感谢本次活动的赞助商『电子工业出版社博文视点』 另外!急于购书的 ...

  6. ROS 机器人操作系统进阶实战

    ROS(Robot Operating System) 是一个开源的机器人操作系统,目的是提供开发平台.工具及生态给开发人员,可以让开发人员快速开发.本课程通过精心设计的案例,分析技术要点.理解运行原 ...

  7. Linux Capabilities 入门教程--进阶实战篇

    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...

  8. oracle dba入门线路图--记某培训公司的ORACLE DBA技能进阶实战大纲

    博主注:给oracle dba入门者的一点建议,个人也收藏一个. ORACLE DBA技能进阶实战 一.新手入行须知 首先了解DBA这个职业,再决定要不要做DBA:如果要做DBA,怎么才能做好DBA: ...

  9. 视频教程-Kali Linux渗透测试基础入门到进阶实战全程课-渗透测试

    Kali Linux渗透测试基础入门到进阶实战全程课 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥499.00 立即订阅 ...

最新文章

  1. 搞了半天,终于弄懂了TCP Socket数据的接收和发送,太难~
  2. mysql双主使用reset master清除日志要小心
  3. tyvj 1067 合唱队形 dp LIS
  4. log4j(六)——log4j.properties简单配置样例说明
  5. php编译参数注解--不明白许多参数的作用 慎用 –with-curlwrappers参数
  6. 我的 .NET Core 博客性能优化经验补充
  7. linux 同步IO: sync msync、fsync、fdatasync与 fflush
  8. i9 9900k mysql_i9-9900K和9900KS有什么区别?i9-9900KS和i9-9900K区别对比评测
  9. 工作流引擎Activiti 学习(表 分类)
  10. 开源与安全兼备 IBM LinuxONE轻松掌控关键业务
  11. 团队管理(二)-敏捷开发最佳团队协作管理平台(TAPD)
  12. 【论文写作技巧】Endnote参考文献统一输出格式
  13. openstack项目中遇到的各种问题总结 其二(云主机迁移、ceph及扩展分区)
  14. 0元参会丨第十届数据技术嘉年华精彩抢先速览
  15. 基金销售:基金转换与超级转换
  16. css动画效果制作正方体旋转相册
  17. HDU 6058 Kanade's sum 逆序求第k大
  18. Js 高德地图SDK
  19. Unity3D-游戏ARVR开发进阶课程 - 动画系统-宋晓波-专题视频课程
  20. python使用kafka生产和消费案例

热门文章

  1. 解决ViewPager嵌套后子ViewPager不能滑动的方法
  2. 巨人网络开发工程师试题
  3. [Hadoop in China 2011] Facebook Message在HBase基础上的应用
  4. 进程间通信之命名管道
  5. Tweaked Identical Binary Trees - Medium
  6. Vim 相关插件整理
  7. ElasticSearch2.4.6的安装部署以及集群部署、ElasticSearch-head等插件的安装
  8. Android 实现闹钟功能
  9. Bootloader
  10. HLG 1539 选课