函数参数
一、函数参数的求值
(1)Call by value(:)
对函数的实参求值,并且只求一次
(2)Call by name(: =>)
对函数的实参求值,并且只求一次
//Call by value
def sum(x : Int,y : Int) = x + x
sum(3+4,8)
//sum(3+4,8) ---> sum(7,8) --> 14
//Call by name
def sum(x : => Int,y : => Int) = x + x
sum(3+4,8)
//sum(3+4,8) --->(3+4) + (3+4) --> 14
二、函数参数的类型
(1)默认参数
当没有给参数赋值,就会使用默认值
def func(name : String = "Freedom") : String = "Hello" + name
func() //Hello Freedom
func("Destiny") //Hello Destiny
(2)代名参数
当有多个默认参数的时候,通过代名参数可以确定给哪个函数参数赋值
def func(str : String = "Hello",name : String = "Freedom") : String = str + name
func() //Hello Freedom
func(name = "Destiny") //Hello Destiny
(3)可变参数
类似于java的可变参数,即参数数量不固定
def sum(num : Int*) = {
var result = 0
for{s <- num}
result += num
result
}
sum(1,2,3,4) //10
异常
try{
var word = scala.io.Source.fromFile("C:\\tmp\\log.log").mkString
}catch{
case ex : FileNotFoundException => {
println("File Not Found Exception")
}
case ex : IllegalArgumentException => {
println("Illegal Argument Exception")
}
case _ : Exception => {
println("This is a Exception")
}
}finally{
println("end")
}
def func() = throw new Exception("Exception")
func: ()Nothing
懒值(lazy)
常量如果是lazy的,它的初始化会被延迟,推迟到第一次使用该常量的时候
var x : Int = 1
lazy var y : Int = x + 1
y : Int = <lazy>