生活随笔
收集整理的這篇文章主要介紹了
Scala _03方法与函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、Scala方法的定義
?
package com.henu.scala02object DefDemo01 {def main(args: Array[String]): Unit = {def fun(a :Int,b :Int): Unit = {println(a+b)}fun(10,20)def fun1(a :Int ,b :Int) = a+bprintln(fun1(100,200))}}
注意點:
方法定義語法 用def來定義可以定義傳入的參數,要指定傳入參數的類型方法可以寫返回值的類型也可以不寫,會自動推斷,有時候不能省略,必須寫,比如在遞歸方法中或者方法的返回值是函數類型的時候。scala中方法有返回值時,可以寫return,也可以不寫return,會把方法中最后一行當做結果返回。當寫return時,必須要寫方法的返回值。如果返回值可以一行搞定,可以將{}省略不寫傳遞給方法的參數可以在方法中使用,并且scala規定方法的傳過來的參數為val的,不是var的。如果去掉方法體前面的等號,那么這個方法返回類型必定是Unit的。這種說法無論方法體里面什么邏輯都成立,scala可以把任意類型轉換為Unit.假設,里面的邏輯最后返回了一個string,那么這個返回值會被轉換成Unit,并且值會被丟棄。
2、遞歸方法
5的階乘
3、參數有默認值的方法
默認值的函數中,如果傳入的參數個數與函數定義相同,則傳入的數值會覆蓋默認值。如果不想覆蓋默認值,傳入的參數個數小于定義的函數的參數,則需要指定參數名稱。
package com.henu.scala02object ParDemo {/*** 包含默認參數值的函數* 注意:* 1.默認值的函數中,如果傳入的參數個數與函數定義相同,則傳入的數值會覆蓋默認值* 2.如果不想覆蓋默認值,傳入的參數個數小于定義的函數的參數,則需要指定參數名稱*/def main(args: Array[String]): Unit = {def fun(a :Int = 10,b :Int): Unit ={println(a+b)}fun(b = 2)}
}
4、可變參數的方法
/*** 可變參數個數的函數* 注意:多個參數逗號分開*/def main(args: Array[String]): Unit = {def fun(elements: Int*)={var sum = 0;for (elem <- elements){sum += elem}sum}println(fun(1,2,3,4,5))}
5、匿名函數
可以將匿名函數返回給val定義的值匿名函數不能顯式聲明函數的返回類型
package com.henu.scala02object NimingFun {/*** 匿名函數* 1.有參數匿名函數* 2.無參數匿名函數* 3.有返回值的匿名函數* 注意:* 可以將匿名函數返回給定義的一個變量*/def main(args: Array[String]): Unit = {//有參匿名val value1 = (a : Int) => {println(a)}value1(5)//無參匿名函數val value2 = () => {println("我是喬治大哥")}value2()//有返回值的匿名函數var value3 = (a:Int,b:Int) =>{a+b}println(value3(10,20))}
}
?6、嵌套方法
package com.henu.scala02//【注】返回值為函數則需指明返回類型
object QianTaoFun {def main(args: Array[String]): Unit = {def fun1(num:Int)={def fun2(a:Int,b:Int):Int={if(a == 1)else{fun2(a-1,a*b)}}fun2(num,1)}println(fun1(5))}
}
7、偏應用函數
偏應用函數是一種表達式,不需要提供函數需要的所有參數,只需要提供部分,或不提供所需參數。
package com.henu.scala02import java.util.Dateobject PianFun {def main(args: Array[String]): Unit = {/*** 偏應用函數*/def log(date :Date,s :String)= {println("date is " + date + ", log is " + s)}val date = new Date()log(date,"log1")log(date,"log2")log(date,"log3")//想要調用log,以上變化的是第二個參數,可以用偏應用函數處理val logDate = log(date,_:String)logDate("log11")logDate("log22")logDate("log33")}
}
?8、高階函數
函數的參數是函數,或者函數的返回類型是函數,或者函數的參數和函數的返回類型是函數的函數。
函數的參數是函數函數的返回是函數函數的參數和函數的返回是函數
package com.henu.scala02object GaoJieFun {def main(args: Array[String]): Unit = {//函數的參數是函數def fun1(f : (Int,Int) =>Int,a :Int) = {f(a,100)}def f(v1 :Int,v2 :Int)={v1+v2}println(fun1(f,1))//函數的返回值是函數//1,2,3,4def fun2(a :Int,b :Int) : (Int, Int) => Int = {def f2(v1: Int, v2: Int): Int = {v1 + v2 + a + b}f2}println(fun2(1,2)(3,4))//println(fun2(1,2)(3,4))這句話調用了兩次?//函數的參數是函數,函數的返回值是函數def fun3(f : (Int,Int) => Int) : (Int,Int) => Int = {f}println(fun3(f)(100,200))println(fun3((a,b) => {a+b})(200,200))//以上這句話還可以寫成這樣//如果函數的參數在方法體中只使用了一次 那么可以寫成_表示println(fun3(_+_)(200,200))}
}
9、柯里化函數
package com.henu.scala02object KeLiHaFun {def main(args: Array[String]): Unit = {def fun(a :Int,b :Int)(c: Int,d: Int) = {a + b + c + d}println(fun(1,2)(3,4))}
}
?
總結
以上是生活随笔為你收集整理的Scala _03方法与函数的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。