方法和函數的區別


一.常見的幾種形式

方法中用函數做參數
  def m1(函數名:(參數類型...) => 返回值) : Int = {
  }
函數的定義
  (形參名:類型...) => 函數體
函數定義常見形式
  val f1 = (x:Int,y:Int) => x + y
函數類型的變量
  val a:(函數參數類型) =>返回值類型 = 函數名

二.方法和函數的區別

1.函數可作為一個參數傳入到方法中,而方法不行,通常情況下方法名可以作為參數,這是因為編譯器會自動將方法轉換成函數,但是仍然不可以說方法可以作為參數

def m1(f: (Int, Int) => Int): Int = {
    f(2, 6)
  }
val f1 = (x: Int, y: Int) => x + y
def f2(x: Int, y: Int): Int = {
    x - y
  }
def main(args: Array[String]): Unit = {
    println(m1(f1)) //正確
    println(m1(f2()) //編譯錯誤
    println(m1(f2)) //正確
  }

2.在Scala中無法直接操作方法(菜鳥上這樣寫的,不明所以),如果要操作方法,必須先將其轉換成函數。有兩種方法可以將方法轉換成函數

val f1 = m _

在方法名稱m后面緊跟一個空格和下划線告訴編譯器將方法m轉換成函數,而不是要調用這個方法。 也可以顯示地告訴編譯器需要將方法轉換成函數

val f1: (Int) => Int = m 

函數類型的變量f1 如果我們直接把一個方法賦值給變量會報錯。如果我們指定變量的類型就是函數,編譯可以通過

3.函數必須要有參數列表,而方法可以沒有參數列表

4.可以把一個函數賦值給變量,但是不可以把一個方法給變量

val f = m _
val f1: (Int) => Int = m
val f2 = m //報錯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM