
- def fun (a: Int , b: Int) : Unit = {
- println(a+b)
- }
- fun(1,1)
-
- def fun1 (a: Int , b: Int) = a+b
- println(fun1(1,2))
注意点:
- 1./**
- 2.* 递归方法
- 3.* 5的阶乘
- 4.*/
- def fun2(num : Int) : Int = {
- if(num == 1)
- num
- else
- num * fun2(num-1)
- }
- print(fun2(5))
- 1./**
- 2.* 包含默认参数值的函数
- 3.* 注意:
- 4.* 1.默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值
- 5.* 2.如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称
- 6.*/
- 7.def fun3(a :Int = 10,b:Int) = {
- 8. println(a+b)
- 9.}
- 10.fun3(b=2)
- 1./**
- 2.* 可变参数个数的函数
- 3.* 注意:多个参数逗号分开
- 4.*/
- 5.def fun4(elements :Int*)={
- 6. var sum = 0;
- 7. for(elem <- elements){
- 8. sum += elem
- 9. }
- 10. sum
- 11.}
- 12.println(fun4(1,2,3,4))
- 1./**
- 2.* 匿名函数
- 3.* 1.有参数匿名函数
- 4.* 2.无参数匿名函数
- 5.* 3.有返回值的匿名函数
- 6.* 注意:
- 7.* 可以将匿名函数返回给定义的一个变量
- 8.*/
- 9.//有参数匿名函数
- 10.val value1 = (a : Int) => {
- 11. println(a)
- 12.}
- 13.value1(1)
- 14.//无参数匿名函数
- 15.val value2 = ()=>{
- 16. println("我爱尚学堂")
- 17.}
- 18.value2()
- 19.//有返回值的匿名函数
- 20.val value3 = (a:Int,b:Int) =>{
- 21. a+b
- 22.}
- 23.println(value3(4,4))
- 1./**
- 2.* 嵌套方法
- 3.* 例如:嵌套方法求5的阶乘
- 4.*/
- 5.def fun5(num:Int)={
- 6. def fun6(a:Int,b:Int):Int={
- 7. if(a == 1){
- 8. b
- 9. }else{
- 10. fun6(a-1,a*b)
- 11. }
- 12. }
- 13. fun6(num,1)
- 14.}
- 15.println(fun5(5))
偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。
- 1./**
- 2.* 偏应用函数
- 3.*/
- 4.def log(date :Date, s :String)= {
- 5. println("date is "+ date +",log is "+ s)
- 6.}
- 7.
- 8.val date = new Date()
- 9.log(date ,"log1")
- 10.log(date ,"log2")
- 11.log(date ,"log3")
- 12.
- 13.//想要调用log,以上变化的是第二个参数,可以用偏应用函数处理
- 14.val logWithDate = log(date,_:String)
- 15.logWithDate("log11")
- 16.logWithDate("log22")
- 17.logWithDate("log33")
函数的参数是函数,或者函数的返回类型是函数,或者函数的参数和函数的返回类型是函数的函数。
- 1./**
- 2.* 高阶函数
- 3.* 函数的参数是函数 或者函数的返回是函数 或者函数的参数和返回都是函数
- 4.*/
- 5.
- 6.//函数的参数是函数
- 7.def hightFun(f : (Int,Int) =>Int, a:Int ) : Int = {
- 8. f(a,100)
- 9.}
- 10.def f(v1 :Int,v2: Int):Int = {
- 11. v1+v2
- 12.}
- 13.
- 14.println(hightFun(f, 1))
- 15.
- 16.//函数的返回是函数
- 17.//1,2,3,4相加
- 18.def hightFun2(a : Int,b:Int) : (Int,Int)=>Int = {
- 19. def f2 (v1: Int,v2:Int) :Int = {
- 20. v1+v2+a+b
- 21. }
- 22. f2
- 23.}
- 24.println(hightFun2(1,2)(3,4))
- 25.
- 26.//函数的参数是函数,函数的返回是函数
- 27.def hightFun3(f : (Int ,Int) => Int) : (Int,Int) => Int = {
- 28. f
- 29.}
- 30.println(hightFun3(f)(100,200))
- 31.println(hightFun3((a,b) =>{a+b})(200,200))
- 32.//以上这句话还可以写成这样
- 33.//如果函数的参数在方法体中只使用了一次 那么可以写成_表示
- 34.println(hightFun3(_+_)(200,200))
- 1./**
- 2.* 柯里化函数
- 3.*/
- 4.def fun7(a :Int,b:Int)(c:Int,d:Int) = {
- 5. a+b+c+d
- 6.}
- 7.println(fun7(1,2)(3,4))