博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala学习第四天 Scala的For与Function进阶实战、Lazy的使用
阅读量:2200 次
发布时间:2019-05-03

本文共 2256 字,大约阅读时间需要 7 分钟。

信息来源于 DT大数据梦工厂微信公众账号:DT_Spark

DT大数据梦工厂群号:302306504王家林老师微信号:wangjialinandroid
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))

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

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

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) )}

3)有默认参数的函数

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

4)参数可变的函数

//通过*表示可以输入多个参数,即参数可变.这里将传入的参数累加,赋值给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);//    }  }}

Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:

百度云盘:

腾讯微云:

360云盘: 访问密码 45e2

转载地址:http://rerub.baihongyu.com/

你可能感兴趣的文章
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>