def functionName ([参数列表]) : [返回值类型] = {
// function body
return [expr]
}
示例
// Code
object FunctionExample {
def main(args: Array[String]): Unit = {
println(addInt(1, 2))
}
def addInt(a:Int, b:Int) : Int = {
var sum:Int = 0
sum = a + b
return sum // 这里去掉 return 也可以
}
}
// Output
3
函数传名调用和传值调用
Scala的解释器在解析函数参数(function arguments)时有两种方式:
传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部
传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部
// 代码
object FunctionExample {
def main(args: Array[String]): Unit = {
delayedByName(time())
println("\n" + "*" * 30 + "\n")
delayedByValue(time())
}
def time(): Long = {
println("获取时间")
System.nanoTime
}
// 传名调用
def delayedByName(t: => Long): Long = {
println("In delayedByName")
t
}
// 传值调用
def delayedByValue(t: Long): Long = {
print("In delayedByValue")
t
}
}
// 输出
In delayedByName
获取时间
******************************
获取时间
In delayedByValue
/* 说明
delayed 方法中,在变量名和变量类型使用 => 符号来设置传名调用
*/
调用时指定参数名
object TestAA {
def main(args: Array[String]): Unit = {
def sub(a:Int, b:Int): Int = {
a - b
}
println(sub(b = 4, a = 10))
}
}
// 输出
6
可变参数
object TestAB {
def main(args: Array[String]): Unit = {
def varParams(a:Int, ss:String*) = {
var res = "" + a + "\t"
for (s <- ss) {
res += s + "\t"
}
res
}
println(varParams(1, "hello", "world"))
}
}
// 输出
1 hello world
默认参数值
object TestAA {
def main(args: Array[String]): Unit = {
def sub(a:Int=20, b:Int): Int = {
a - b
}
println(sub(b = 4, a = 10))
println(sub(b = 4))
}
}
// 输出
6
16