日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala _03方法与函数

發布時間:2024/2/28 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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方法与函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。