Scala自定义函数
Scala的函数定义以“def”开头,然后是一个自定义的函数名(推荐驼峰命名法),接着是用圆括号“( )”包起来的参数列表。在参数列表里,多个参数用逗号隔开,并且每个参数名后面要紧跟一个冒号以及显式声明的参数类型,因为编译器在编译期间无法推断出入参类型。写完参数列表后,应该紧跟一个冒号,再添加函数返回结果的类型。最后,再写一个等号“=”,等号后面是用大括号“{ }”包起来的函数体。例如:
用“def”开始函数定义
| 函数名
| | 参数及参数类型
| | | 函数返回结果的类型
| | | | 等号
| | | | |
def max(x: Int, y: Int): Int = {
if(x > y)
x
else |
y |
} |
|
大括号里定义函数体
一般函数
规范化写法,scala 函数的返回值是最后一行代码;
def minValue(a:Int,b:Int):Int = { //一般函数
if (a>b) b else a
}
val result = minValue(21,12)
println(result)
def self(name:String,age:Int):String ={
s"我的名字是:$name,我的年龄是:$age"
}
val a=self("zhangsan",22)
println(a)
递归函数
相当于阶乘 输入10 输出1098…*1的值
def ji(n:Int):Int={
if(n==1) 1 else
n*ji(n-1)
}
println(ji(10))
指定形参传参
def showMsg(name:String,age:Int):Unit={
println("hello:"+name+",age:"+age)
}
showMsg("gree",18)
showMsg(age = 33,name = "green")
通过* 可以指定未知长度的参数
def showMsg(name:String,s:String*):Unit={
println(name)
println(s.getClass)
for (str <- s ){
println(str)
}
}
showMsg("gree1")
showMsg("gree2","ss1")
showMsg("gree3","ss1","ss2","ss4")
匿名函数
def sum(a:Int,b:Int):Int=a+b
val abc=(a:Int,b:Int) =>a+b //表达式代表 匿名函数
val cba=abc
println(sum(10,20))
println(abc(10,20))
println(cba(10,20))
val a:String ="aaa"
val b:Int=21
val abc2:(Int,Int) => Int = (a:Int,b:Int) =>a+b
val abc3:(Int,Int) => Int = sum
val cba2:(Int,Int) =>Int = abc2
传参的时候直接传函数
def funTest(f:(Int,Int)=>Int,msg:String):String={
val a=100
val b=50
msg+f(a,b)
}
def sum(a:Int,b:Int):Int={
a+b
}
println(funTest(sum,"和:")) //可以自定义函数调用f的参数
println(funTest((a:Int,b:Int)=>a+b,"和:")) //也可以用匿名函数直接调用