scala之函式是個什麼鬼,scala中方法和函式的區別

時間 2022-03-25 20:10:02

1樓:匿名使用者

竹外桃花三兩枝,春江水暖鴨先知

2樓:中公教育it培訓優就業

scala中的函式同樣是一段業務邏輯。scala是面向函式的語言,函式在scala中是可以獨立存在的。並且,scala中的方法可以看作是一種特殊的函式。

scala中函式的定義有兩種形式,一種是簡單的定義形式,一種是複雜的定義形式。具體定義形式如下所示:

簡單的定義形式:

注意,這裡的是函式的一個顯著特徵,看到「=>」我們就知道這裡定義了一個函式。

示例:複雜的定義形式:

示例:好了,到現在為止,我們看到的只是scala函式的簡單使用。實際上,scala中的高階函式才是真正的殺手鐗。這裡的高階函式使用非常靈活,可以達到最大限度的**重用。

那麼,什麼是高階函式呢? 在說高階函式之前,我們先看看函式是不是有型別的?

函式是可以有引數的,引數可以是任意的scala型別。這裡函式我們同樣可以理解為一種型別。函式的型別也稱為函式的簽名,簽名包括了函式引數的型別和返回值型別。

如:(int,int)=>int,便是一個函式的簽名,也就是函式的型別。

那這樣就很容易理解了,既然函式也是有型別的,我們可以把它理解成一種特殊的變數。

具體來說,高階函式包括了三種形式:

1. 函式的引數是函式

2. 函式的返回值是函式

3. 函式的引數和返回值都是函式

scala中方法和函式的區別

scala 中方法和函式的區別

scala中x.***()()什麼意思,就比如說下面這段兩個小括號接在一起什麼意思

3樓:匿名使用者

這行**定義了一個變數,型別為函式,你可以在腦海中簡化為:val fun = 3 * _

其中fun後面冒號的'(double) => double'是一個整體,是變數fun的型別

這種形式的型別代表了一個函式,'=>'之前的是函式的引數,之後的是返回型別

這裡是宣告fun是一個接受一個double型引數並返回double型結果的函式

'='就是賦值,'='左邊是變數及變數型別宣告,右邊是一個資料

具體來說,右邊是一個函式的簡寫,等價於'x => 3 * x',就是返回輸入引數的3倍

總的來說:

'=>'在scala裡是宣告函式的,其前面是引數,後面是返回結果

'='就是賦值,跟別的語言沒有不同,你這裡看糊了主要還是一時沒有看清**的結構

scala中的部分應用函式和偏函式的區別

4樓:匿名使用者

部分應用函式和偏函式是無關的。

5樓:檳僑

這是我的學習筆記,有點多,不過趕腳總結的還可以,你闊以看看:

6樓:鄭丫飛

簡單來說,部分應用函式和偏函式是無關的。

前者只是在「已有函式」的基礎上,提供部分預設引數,未提供預設引數的地方使用「_」替代,從而建立出一個「函式值」,在使用這個函式值(部分應用函式)的時候,只需提供「_」部分對應的引數即可。

這是我的學習筆記,有點多,不過趕腳總結的還可以,你闊以看看:

部分應用函式:

你還可以使用單個「_」替換整個引數列表。例如可以寫成:

list(1,2,3,4,5).foreach(println(_))

或者更好的方法是你還可以寫成:

list(1,2,3,4,5).foreach(println _)

以這種方式使用下劃線時,你就正在寫一個部分應用函式。部分應用函式是一種表示式,你不需要提供函式需要的所有引數,代之以僅提供部分,或不提供所需引數。如下先定義一個函式,然後建立一個部分應用函式,並儲存於變數,然後該變數就可以作為函式使用:

def sum(a: int, b: int, c: int) = a + b + c

val a = sum _

println(a(1,2,3))

val b = sum(1, _: int, 3)

如果你正在寫一個省略所有引數的部分應用函式表示式,如println _或sum _,而且在**的那個地方正需要一個函式,你就可以省略掉下劃線(不是需要函式的地方,你這樣寫,編譯器可能會把它當作一個函式呼叫,因為在scala中,呼叫無***的函式時,預設不加括號)。如下**就是:

list(1,2,3,4,5).foreach(println)

偏函式:

偏函式和部分應用函式是無關的。偏函式是隻對函式定義域的一個子集進行定義的函式。scala中用scala.

partialfunction[-t,+s]來表示。偏函式主要用於這樣一種場景:對某些值現在還無法給出具體的操作(即需求還不明朗),也有可能存在幾種處理方式(視乎具體的需求),我們可以先對需求明確的部分進行定義,以後可以再對定義域進行修改。

partialfunction中可以使用的方法如下:

isdefinedat:判斷定義域是否包含指定的輸入。

orelse:補充對其他域的定義。

compose:組合其他函式形成一個新的函式,假設有兩個函式f和g,那麼表示式f _ compose g _則會形成一個f(g(x))形式的新函式。你可以使用該方法對定義域進行一定的偏移。

andthen:將兩個相關的偏函式串接起來,呼叫順序是先呼叫第一個函式,然後呼叫第二個,假設有兩個函式f和g,那麼表示式f _ andthen g _則會形成一個g(f(x))形式的新函式,剛好與compose相反。

私人影院是什麼鬼,私人影院是個什麼鬼玩意?

叫那個不知道 私人影院,觀眾可以按影片型別 流行程度 年份等不同標準進行分類查詢,選到中意影片後只要按一下按鈕,電腦就會自動 下單 然後您就可以帶上零食,在包廂裡坐等電影開始了,一個包廂少則1人,多至8人,窩在小包廂大皮椅裡,同時也保證了觀影的私密性。擴充套件資料庫存中最新的影片基本都是兩三個月前影...

函式y 1分之x,的單調區間,為什麼是( 負無窮,0)和(0,正無窮)

霹靂震寰宇 負無窮,0 0,正無窮 意思是在這個區間單調遞減。負無窮,0 和 0,正無窮 意思是在 負無窮,0 單調遞減,另外在 0,正無窮 單調遞減 你看看影象就知道 我辛苦製作 x1 x2,但是f x1 f x2 那麼函式就是單調遞增了。與單調遞減相矛盾。不懂繼續hi我 天泉聖人 該函式無法用一...

人力共享是個什麼鬼,靠不靠譜,人力共享好不好啊?有沒有發展前景?

人力資源共享服務中心 hrssc 是指企業集團將各業務單元所有與人力資源管理有關的行政事務性工作 如員工招聘 薪酬福利核算與發放 社會保險管理 人事檔案人事資訊服務管理 勞動合同管理 新員工培訓 員工投訴與建議處理 諮詢與專家服務等 集中起來,建立一個服務中心。該中心為集團所有的業務單元提供人力資源...