感性的認識一下方法和函式
方法m 是乙個邏輯操作快;
函式f 是物件,可以賦值給乙個變數或常量;
函式f 有乙個=>轉換符號;
object methodandfunctiondemo
//定義乙個函式f1,引數是兩個int型別,返回值是乙個int型別
val f1 =
(x:int,y:int)
=> x + y
//再定義乙個函式f2
val f2 =
(m:int,n:int)
=> m * n
//main方法
def main
(args: array[string]
): unit =
}
執行結果:
8
12
帶引數列表的方法m 不能作為單獨的表示式而存在,引數為空的除外;
函式f 可以;
有兩種方法可以將方法轉換成函式:
val f1 = m _
在方法名稱m後面緊跟乙個空格和下劃線告訴編譯器將方法m轉換成函式,而不是要呼叫這個方法。 也可以顯示地告訴編譯器需要將方法轉換成函式:
val f1: (int) => int = m
通常情況下編譯器會自動將方法轉換成函式,例如在乙個應該傳入函式引數的地方傳入了乙個方法,編譯器會自動將傳入的方法轉換成函式。
object testmap
val f0 =
(x : int)
=> x * x
//定義了乙個方法
def m0
(x:int)
: int =
//將方法轉換成函式,利用了神奇的下滑線
val f1 = m0 _
def main
(args: array[string]
): unit =
}
輸出結果為:
100
100100
100
方法m 可以沒有引數列表;
函式f 必須有;
在需要函式的地方或者說指定型別為函式的地方,傳入乙個方法m,會自動轉成函式f;
例如:把乙個方法賦值給乙個變數或常量,如果沒有指定變數的型別是函式,則會報錯,所以需要指定變數型別為函式才會自動轉換方法為函式;或者過m _
強制轉換方法為函式。
在需要函式的地方,如果傳遞乙個方法,會自動進行eta展開(把方法轉換為函式)
如果我們直接把乙個方法賦值給變數會報錯。如果我們指定變數的型別就是函式,那麼就可以通過編譯,如下:
當然我們也可以強制把乙個方法轉換給函式,這就用到了 scala 中的部分應用函式:
上圖方法m1的引數就是傳名引數(方法),由於對於引數為空的方法來說,方法名就是方法呼叫,那麼list(x,x)就是是進行了兩次方法x呼叫。
方法是乙個以def開頭的帶有引數列表(可以無引數列表)的乙個邏輯操作塊,這正如object或者class中的成員方法一樣。
函式是乙個賦值給乙個變數(或者常量)的匿名方法(帶或者不帶引數列表),並且通過參考:=>
轉換符號帶上邏輯**塊的乙個表示式。=>
轉換符號後面的邏輯**塊的寫法與method的body部分相同。
scala 方法和函式的區別
scala method(方法) 和 functio(函式) 的區別
這幾個的用法傻傻分不清
每每看到這幾個,就矇圈了,這都是啥呀?既然這麼容易混淆,我還是來做個小筆記吧,以便日後查閱 1.slice 陣列 用法 array.slice start,end 解釋 該方法是對陣列進行部分擷取,並返回乙個陣列副本 引數start是擷取的開始陣列索引,end引數等於你要取的最後乙個字元的位置值加上...
這幾個的用法傻傻分不清
每每看到這幾個,就矇圈了,這都是啥呀?既然這麼容易混淆,我還是來做個小筆記吧,以便日後查閱 1.slice 陣列 用法 array.slice start,end 解釋 該方法是對陣列進行部分擷取,並返回乙個陣列副本 引數start是擷取的開始陣列索引,end引數等於你要取的最後乙個字元的位置值加上...
氣泡排序和插入排序傻傻分不清
氣泡排序和插入排序的時間複雜度相同,容易搞混淆。氣泡排序最壞情況時間複雜度o n 2 最好情況時間複雜度o n 插入排序最壞情況時間複雜度也是o n 2 最好情況時間複雜度也是o n 氣泡排序和插入排序都是穩定的,穩定是指如果兩個數相等,排序過後它們的前後順序不變。如a b,排序前a在b的前面,排序...