Scala方法与函数(二)
程序员文章站
2022-06-14 18:55:59
...
1、方法定义
1)方法体中最后返回值可以使用return,如果使用了return,那么方法体的返回值类型一定要指定
2)如果方法体中没有return,默认将方法体最后一行计算的结果当作返回值返回,方法体的返回值类型可以省略,会自动推断
3)定义方法传入的参数一定要指定类型
4)方法体中如果可以一行搞定,括号可省略
5)如果定义方法时,省略了方法名称和方法体之间的“=”,那么无论方法体最后一行计算的结果是什么,都会被丢弃,返回Unit
6)定义方法时使用def
def max(x:Int,y:Int): Int ={
if(x>y) x else y
}
val result = max(10,100)
// println(result)
def min(x:Int,y:Int): Unit={
if(x>y){
x
} else {
y
}
}
2、递归方法
递归方法要显示声明汉书的返回值类型
def fun(num:Int):Int={
if(num == 1){
}else{
num*fun(num-1)
}
}
3、参数有默认值的方法
def fun2(a:Int=10,b:Int=20): Int ={
a+b
}
4、可变参数的方法
=>代表匿名函数
// def fun3(s:String*): Unit ={
// s.foreach(elem=>{println(elem)})//=>代表匿名函数(elem:String)=>{println(elem)}
// // for(elem <- s){
// // println(elem)
// // }
// }
def fun3(s:String*): Unit ={
s.foreach(println(_))//=>代表匿名函数(elem:String)=>{println(elem)}
s.foreach(println)
}
// fun3("hello","a","b")
5、匿名函数
"=>"就是匿名函数,多用于方法的参数是函数时,常用匿名函数
def fun4=(a:Int,b:Int)=>{
a+b
}
//println(fun4(10,40))
6、嵌套方法
def fun5(num:Int): Int ={
def fun6(a:Int): Int ={
if(a==1) 1 else a*fun6(a-1)
}
fun6(num)
}
//println(fun5(num=5))
7、偏应用函数
某些情况下,方法中参数非常多,调用这个方法非常频繁,每次调用只有固定的某个参数变化,其他不变,可以定义为偏应用来实现
def showLog(date:Date,log:String): Unit ={
println(s"date is $date ,log is $log")
}
val date = new Date()
// showLog(date,log="a")
// showLog(date,log="b")
// showLog(date,log="c")
def fun7=showLog(date,_:String)
// fun7("aaa")
// fun7("bbb")
// fun7("ccc")
8、高阶函数
1)方法的参数是函数
2)方法的返回是函数,<显示写出函数返回值类型,加下划线可以不显示的声明方法的返回值类型>
3)方法的参数和返回都是函数
//方法的参数是函数
def fun8(a:Int,b:Int): Int ={
a+b
}
def fun9(f:(Int,Int)=>Int,s:String): String ={
val i = f(100,200)
i+"#"+s
}
val result1 = fun9(fun8,"scala")
val result3 = fun9((a:Int,b:Int)=>{a*b},"scala")
//println(result3)
//方法的返回是函数
def fun10(s:String): (String,String)=>String ={
def fun11(s1:String,s2:String): String ={
s1+"#"+s2+"*"+s
}
fun11 _ //"_"可以直接将方法当作返回值
}
// println(fun10("a")("b","c"))
//方法的参数和返回都是函数
def fun12(f:(Int,Int)=>Int):(String,String)=>String ={
val i:Int = f(1,2)
def fun13(s1:String,s2:String): String ={
s1+"@"+s2+"&"+i
}
fun13
}
println(fun12((a:Int,b:Int)=>{a+b})("hello","world"))
9、柯里化函数
def fun14(a:Int,b:Int)(c:Int,d:Int): Int ={
a+b+c+d
}
println( fun14(1,2)(3,4))
}
上一篇: Scala不可变数组
推荐阅读
-
redis与ssm整合方法(mybatis二级缓存)
-
Python实现二叉树结构与进行二叉树遍历的方法详解
-
一波神奇的Python语句、函数与方法的使用技巧总结
-
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
-
PHP二维数组排序的3种方法和自定义函数分享
-
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
-
php中eval函数的危害与正确禁用方法
-
liunx 时间函数与时间格式与字符串之间的转化方法
-
Python二叉搜索树与双向链表转换实现方法
-
PHP空值检测函数与方法汇总