第2课 Scala函数入门实战

函数示例

函数的定义使用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函数入门实战)