Scala中方法轉函式原理講解

2021-10-22 02:19:51 字數 1258 閱讀 6020

在scala有這樣一種語法,被稱為方法轉函式,實則不然,這其中的本質實際是這個函式呼叫了這個方法,函式還是函式,方法依然是方法,下面通過**進行講解。

先將最常使用的方式寫出來進行講解

object callbyname 

// 定義如下方法

def m(x:

int)

:unit

= println(x * x)

}

執行結果如下:

可以看到,在執行方法func的時候,得到結果就是通過方法m的邏輯計算出來的結果,這種寫法看似是將方法m轉成了函式func,其實不是。

通過scala shell執行一下大家就很容易看出來原因,首先定義乙個方法m,如下所示

再單獨執行一下』m _』 如所圖所示

可以看到當我們執行』m _'的時候實際是生成了乙個函式,而本身並沒有發生變化,而這個函式內也並不是出現了』x * x』這樣的邏輯,這個函式內部實際是呼叫了m方法,只是這個方法和m方法的簽名相同,在idea中通過debug也很容易看出來,我這裡打了兩個斷點,如下圖所示

通過debug執行,執行到函式func的時候,如下圖所示

再繼續執行下一步,如下圖所示

可以到,實際還是執行了m方法本身。

通過如下**可以對「方法轉函式」有乙個更清晰的認知

object callbyname 

func(5)

}// 定義如下方法

def m(x:

int)

:unit

= println(x * x)

}

很多書籍上可能會這種現象說明為方法轉函式,但是嚴格上來說只是生成了乙個新的函式,這個函式的內部呼叫了這個方法而已,寫這個也是希望大家對這個有乙個更清晰的認知。

scala 方法與函式

定義方法的基本格式是 def 方法名稱 引數列表 返回值型別 方法體 def add x int,y int int x y println add 1,2 也可以定義成 def add x int,y int x y 或者 def add x int,y int 沒有返回值一定要用大括號那方法體括...

Scala 方法和函式

目錄 方法的定義 函式 定義方式 方法和函式的相互轉換 遞迴函式優化 高階函式 scala 函式柯里化 currying 柯里化 閉包 def functionname 引數列表 return type abstract class test scala 方法是類的一部分,而函式是乙個物件可以賦值給...

scala函式和方法

方法的定義 方法總結 1.對於只有一行 的方法體,可以省略 2.可以不寫返回值型別 定義遞迴方法時除外,必須帶返回值型別,否則不知道返回值型別 def qiuhe x int,x int 3.定義的方法若沒有返回值,則不用寫 號,若不寫 號,即使有返回值也不返回 返回值型別為unit,其實 是uni...