美文网首页
第2课 Scala函数入门实战

第2课 Scala函数入门实战

作者: flyskyzyl | 来源:发表于2016-04-27 22:08 被阅读0次

    函数示例

    函数的定义使用def关键字,并且函数体最后有返回值。

    //声明了一个函数f3,两个参数:param1是String类型,param2为Int类型。param2默认值为30,因为有了默认值,那么在调用上可以不传param2。

    scala>deff3(param1:String, param2:Int=30) = param1 + param2

    f3: (param1: String, param2: Int)String

    //调用函数f3,传入第一个参数param1值为Spark,没有传入第二个参数,默认为30。

    scala> f3("Spark")

    res4: String = Spark30

    //带名参数调用,即在函数调用时,显示指定参数名,并不按顺序传入。

    scala> f3(param2=100, param1="Scala")

    res5: String = Scala100

    //变长参数, 定义了一个sum函数,参数numbers是变成参数,即传入的Int变量个数不定。在函数体中,对传入的全部Int变量进行循环遍历并累计求和,最后把结果返回。

    scala> def sum(numbers:Int*)={var result=0;   for(element<-numbers) result +=element; result}

    sum: (numbers: Int*)Int

    scala> sum(1,2,3,4,5,6,7,8,9,10)

    res1: Int = 55

    //下面示例是一个非常经典的语法

    scala> sum(1 to 10: _*)// _* 表示提取里面的每个元素, 然后作为变长参数传递

    res3: Int = 55

    过程

    没有返回值的函数就是过程。

    //这是一个函数

    scala> def morning(content:String) = "Good" + content

    morning: (content: String)String

    //这是一个过程

    scala> def morning(content:String) { println( "Good" + content)}

    morning: (content: String)Unit

    //强制声明一个过程

    scala> def morning(content:String):Unit=  "Good" + content

    morning: (content: String)Unit

    声明lazy类型

    scala> import scala.io.Source._//导入引用库

    import scala.io.Source._

    //声明一个lazy类型的变量content,打开一个不存在的文件。

    scala> lazy val content = fromFile("/root/txt")

    content: scala.io.BufferedSource = 

    以上示例执行不会出错,表明content变量并没有执行。

    //如果去掉lazy关键字,那么会出错,提示文件不存在。

    scala> val content = fromFile("/root/txt")

    java.io.FileNotFoundException: /root/txt (No such file or directory)

    at java.io.FileInputStream.open0(Native Method)

    at java.io.FileInputStream.open(FileInputStream.java:195)

    at java.io.FileInputStream.(FileInputStream.java:138)

    耗时的操作,在大型分布式系统中,比较常见。声明lazy类型的变量,在需要的时候才去执行。

    异常

    //首先导入相关引用包

    scala> import java.io._

    import java.io._

    scala>

    //示例打开一个存在的文件,使用try…catch捕获异常

    scala> try{

    |     val content = fromFile("/root/.bashrc").mkString

    | }catch{

    |     //case是一个偏函数

    |     case _: FileNotFoundException => println("Oh, file not found!")

    | }finally{

    |     println("Ok!")

    | }

    Ok!

    scala>

    //示例打开一个不存在的文件,使用try…catch捕获异常

    scala> try{

    |     val content = fromFile("/root/.bashrc111").mkString

    | }catch{

    |     //case是一个偏函数

    |     case _: FileNotFoundException => println("Oh, file not found!")

    | }finally{

    |     println("Ok!")

    | }

    Oh, file not found!

    相关文章

      网友评论

          本文标题:第2课 Scala函数入门实战

          本文链接:https://www.haomeiwen.com/subject/ufncrttx.html