scala函式
- //函式基本定義
- /*
- object Test{
- def main(args: Array[String])
- {
- println("Return Value: "+addInt(3,8));
- }
- def addInt(a:Int,b:Int):Int={
- return a+b;
- }
- }*/
- //函式按名稱呼叫
- /*object Test{
- def main(args:Array[String]){
- delayed(time());
- }
- def time()={
- println("Geting time in nano second");
- System.nanoTime;
- }
- def delayed(t: => Long)={
- //println("In delayed mathod");
- println(t);
- //t;
- }
- }*/
- //使用命名引數
- /*object Test{
- def main(args: Array[String]){
- printInt(b=5,a=7);
- }
- def printInt(a:Int,b:Int)={
- println("Value of a: "+a);
- println("Value of b: "+b);
- }
- }*/
- //遞迴函式
- /*object Test{
- def main(args: Array[String])={
- for(i<- 1 to 10)
- println("Factorial of "+ i+":= "+fac(i));
- }
- def fac(n:Int):BigInt={
- if(n<=1)
- return 1;
- else
- return n*fac(n-1);
- }
- }*/
- //可變引數
- /*object Test{
- def main(args: Array[String]){
- printStrings("AAA","BBB","CCC");
- }
- def printStrings(args: String*)={
- var i=0;
- for(arg<-args){
- println("Arg value[" + i + "]=" + arg);
- i+=1;
- }
- }
- }*/
- //預設引數函式
- /*object Test{
- def main(args: Array[String]){
- println("Return Value: " + addInt(9));
- }
- def addInt(a:Int=5,b:Int=7):Int={
- return a+b;
- }
- }*/
- //函式賦值給變數
- /*object Test{
- def main(args:Array[String]){
- var f1=func1 _//_將func1轉化為函式變數賦值給f1
- f1("spark")
- }
- def func1(name:String)={
- println(name)
- }
- }*/
- /*高階函式
- *1.函式的引數是函式
- *2.函式返回值是函式
- */
- //函式的引數是函式
- /*object Test{
- def main(args:Array[String]){
- println(func1(scala.math.ceil _))
- println(func1(f11))
- }
- def func1(f1:(Double)=>Double)=f1(100.55)//f1是函式引數,傳入Double,返回Double
- def f11(x:Double):Double={
- if(x>10.0)
- 1.1
- else
- 0.0
- }
- }*/
- //返回一個函式的函式
- /*object Test{
- def main(args:Array[String]){
- val quintuple=mulBy(5)
- var value=quintuple(20)
- println(value)
- }
- def mulBy(factor:Double)=(x:Double)=>factor*x
- }*/
- //匿名函式
- /*object Test{
- def main(args:Array[String]){
- var inc=(x:Int)=>x+1
- println(inc(7))
- var mul=(x:Int,y:Int)=>x*y
- println(mul(3,4))
- var userDir=()=>{System.getProperty("user.dir")}
- println(userDir)
- }
- }*/
- //柯里化函式:原來接收兩個引數的函式變成接收一個引數的函式的過程,新的函式返回一個以原有第二個引數
- //作為引數的函式(即柯里化函式接收多個引數構成一條鏈,每次取一個引數)
- /*object Test{
- def main(args:Array[String]){
- println(mulBy(3,4));
- println(mulBy1(4)(6));
- println(mulBy2(7)(8));
- //var r=f1(3,4)(bigger(_,_))
- var r=f1(3)(4)(bigger(_,_))
- println(r)
- }
- //普通定義兩個引數
- def mulBy(x:Int,y:Int)=x*y
- //柯里化函式
- def mulBy1(x:Int)=(y:Int)=>x*y
- //更簡潔的柯里化
- def mulBy2(x:Int)(y:Int)=x*y
- //柯里化例項1
- /*def f1(x:Int,y:Int)(bigger:(Int,Int)=>Boolean)={
- if(bigger(x,y)) x else y
- }*/
- def f1(x:Int)(y:Int)(bigger:(Int,Int)=>Boolean)={
- if(bigger(x,y)) x else y
- }
- def bigger(x:Int,y:Int)={
- if(x>y) true else false
- }
- }
- */
- //巢狀函式:scala允許在一個函式內部定義其他函式,在內部可被呼叫
- /*object Test{
- def main(args:Array[String]){
- println(factorial(3))
- println(factorial(4))
- println(factorial(5))
- }
- def factorial(i:Int):Int={
- def fact(i:Int,accumulator:Int):Int={
- if(i<=1)
- accumulator
- else
- fact(i-1,i*accumulator)
- }
- fact(i,1)
- }
- }*/
- //部分應用函式:呼叫函式時,不指定函式所需的所有引數,這樣 建立了一個新的函式,這個新的函式被稱為原始函式的部分應用函式
- /*import java.util.Date
- object Test{
- def main(args:Array[String]){
- val logWithDateBound=log(_:Date,"time")
- logWithDateBound(new Date)
- Thread.sleep(1000)
- logWithDateBound(new Date)
- Thread.sleep(1000)
- logWithDateBound(new Date)
- }
- def log(date:Date,message:String)={
- println(date+"----"+message);
- }
- }*/
- //閉包:變數不在函式作用域範圍之內還可以被呼叫
- /*object Test{
- def main(args:Array[String]){
- var more=1;
- //函式變數addMore是一個"閉包"
- val addMore=(x:Int)=>x+more
- println(addMore(100))
- //當這個自由變數變化時,閉包能夠捕獲到這個變化,因此閉包捕獲的是這個變數本身
- more=999;
- println(addMore(1))
- // 如果閉包在變化,也會反映到閉包外面的值
- val someNumbers=List(-11,-10,-5,0,5,10)
- var sum=0
- someNumbers.foreach(sum+=_) //_代表引數列表
- println(sum) //可以看到在閉包中修改sum的值,結果傳遞到了閉包的外面
- }
- }*/
//引數的位置標記法
如果某個引數在函式裡使用了一次,就可以用下劃線來表示。每次在函式裡用下劃線,都表示隨後的引數
例子:
val arr=Array(1,2,3)
println((0 /: arr){(sum,elem)=>sum+elem})// /:函式是循壞取值
//(sum,elem)=>sum+elem可以改寫成
_ + _,第一個_表示函式呼叫過程中持續存在的值,第二個_表示陣列元素
var max=(Integer.MIN_VALUE /: arr){(large,elem)=>max(large,elem)}
//(large,elem)=>max(large,elem)可改寫為max(_,_)
//_不止可以表示一個引數,也可以表示整個引數列表,因此可以這樣改:max
_
相關文章
- scala(三)函式函式
- Scala 的方法與函式函式
- scala語法 - 方法與函式函式
- 學習Scala 方法與函式函式
- Scala(一):函式、流程控制、引數函式
- Scala與Java差異(三)之函式Java函式
- 關於scala中的主建構函式函式
- scala簡明教程:偏函式、高階函式、Future非同步程式設計、隱式轉換函式非同步程式設計
- 大資料Scala系列之樣例類_Option_偏函式大資料函式
- 好程式設計師大資料教程Scala系列之高階函式程式設計師大資料函式
- Scala Essentials: 隱式轉換
- 一門多正規化的程式語言Scala學習收尾-函式的使用函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 好程式設計師大資料教程分享Scala系列之Option_偏函式_String程式設計師大資料函式
- 聊聊JavaScript和Scala的表示式 ExpressionJavaScriptExpress
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- (譯) 函式式 JS #2: 函式!函式JS
- 好程式設計師大資料學習路線分享Scala系列之集合操作函式程式設計師大資料函式
- 核函式 多項式核函式 高斯核函式(常用)函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- ABAP mesh表示式, JavaScript和Scala的 expressionJavaScriptExpress
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- main函式的入口函式AI函式
- SQL-函式 - 聚合函式SQL函式
- 【每日函式】每日函式(2021.08.16)函式
- 【每日函式】每日函式(2021.08.10)函式
- 【每日函式】每日函式(2021.08.05)函式
- 【每日函式】每日函式(2021.08.06)函式
- 【每日函式】每日函式(2021.08.14)函式
- 【每日函式】每日函式(2021.08.08)函式
- 【每日函式】每日函式(2021.08.09)函式
- 【知識點】inline函式、回撥函式、普通函式inline函式
- scala:函式作為值或引數進行傳遞、作為返回值進行返回函式
- 學好Spark/Kafka必須要掌握的Scala技術點(三)高階函式、方法、柯里化、隱式轉換SparkKafka函式
- Python函式與lambda 表示式(匿名函式)Python函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣