Scala.02

一、变长参数
在Scala中,有时需要将函数定义为参数个数可变的形式,则此时可以使用变长参数定义函数。

def sum(nums:Int*) = {
var res = 0
for (num <- nums)res += num
res
}
Scala.02_第1张图片
1.使用序列调用变长参数:
不能用已有序列直接调用变长函数。如val s = sum(1 to 5)。此时需要使用Scala特殊的语法将参数定义为序列,让Scala解释器能够识别。
val s = sum (1 to 5:_*)
Scala.02_第2张图片例:使用递归函数实现累加

def sum2(nums: Int*): Int = {
if (nums.length == 0) 0
else nums.head + sum2(nums.tail: _*)
}
Scala.02_第3张图片
**二、过程
在Scala中,定义函数时,如果函数体直接包裹在了花括号内,而没有使用=连接,则函数的返回值类型就是Unit。这样的函数就被称之为过程。过程通常用于不需要返回值的函数。
过程还有一种写法,就是将函数的返回值类型定义为Unit。
def sayHello(name: String) = "Hello, " + name
在这里插入图片描述
def sayHello(name: String) { print("Hello, " + name); "Hello, " + name }
在这里插入图片描述
def sayHello(name: String): Unit = "Hello, " + name
在这里插入图片描述
1.lazy值:
在Scala中,提供了lazy值的特性,也就是说,如果将一个变量声明为lazy,则只有在第一次使用该变量时,变量对应的表达式才会发生计算。这种特性对于特别耗时的计算操作特别有用,比如打开文件进行IO,进行网络IO等。

import scala.io.Source._
lazy val lines = fromFile(“C://Users//Administrator//Desktop//test.txt”).mkString
Scala.02_第4张图片

即使文件不存在,也不会报错,只有第一个使用变量时会报错,证明了表达式计算的lazy特性。
2.异常:

try {
throw new IllegalArgumentException(“x should not be negative”)
} catch {
case _: IllegalArgumentException => println(“Illegal Argument!”)
} finally {
print(“release resources!”)
}
Scala.02_第5张图片
三、Array
在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组。此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java数组。例如字符串数组在底层就是Java的String[],整数数组在底层就是Java的Int[]。

数组初始化后,长度就固定下来了,而且元素全部根据其类型初始化。
val a = new Array[Int](10)
在这里插入图片描述
val a = new Array[String](10)

你可能感兴趣的:(Scala.02)