1、定义函数时,需要定义函数的函数名、参数、函数体。
Scala要求必须给出所有参数的类型,但是不一定给出函数返回值的类型,只要右侧的函数体中不包含递归的语句,Scala就可以自己根据右侧的表达式推断出返回类型。
举例eg:
def sayHello(name: String, age: Int) = {
if (age > 18) {
printf("hi %s, you are a big boy\n", name)
age
} else {
printf("hi %s, you are a little boy\n", name)
age
}
}
调用:sayHello("Tom", 15)
定义单行函数:
def sayHello(name: String) = print("Hello, " + name)
2、函数的默认参数
当调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数;
举例:eg
def sayHello(firstName: String, middleName: String = "swift", lastName: String = "Croft") = firstName + " " + middleName + " " + lastName
3、变长参数:
在Scala中,有时我们需要将函数定义为参数个数可变的形式,则此时可以使用变长参数定义函数。
def sum(nums: Int*) = {
var res = 0
for (num <- nums)
res += num
res
}
调用方式: sum(1,2,3,5) 是正确的
sum( 1 to 5) 是错误的 报 error: type mismatch; 它是一个序列
对于一个序列化的参数 正确的实现方式如下:var s=sum(1 to 5:_*)
用递归的方式实现变长参数的累加
def sum2(nums:Int*):Int={
if(nums.length==0)
0
else
nums.head+sum2(nums.tail:_*)
}