2017-10-08 39 views
0

爲什麼有兩種方法來定義原因, 函數,是多麼的正是他們的不同(包括編譯成相同的JavaScript)兩種方法來定義一個函數

let f1 = fun (a) => 123; 
let f2 a => 123; 

try this snippet

+0

請參閱https://reasonml.github.io/guide/language/function,尤其是以'由於函數定義經常出現......' – Yawar

回答

4

實際上有三種功能定義形式:

let f = fun a => fun b => a + b; 
let f = fun a b => a + b; 
let f a b => a + b; 

後兩種形式實際上只是第一種糖,稱爲咖喱形式, d在函數式編程中是一個非常方便的功能,因爲它通過部分應用參數來實現更簡單的功能組合。但是除非我們用一些糖來覆蓋它,否則它不是那麼方便,因此是第二種形式。

但爲什麼不跳過第二種形式,直接進入第三種?那麼,第二種形式有點「意外」。它自然來自兩個其他特徵:1.因爲函數是一流的,這意味着它們可以匿名定義並像任何其他值一樣傳遞。 2.因爲我們可以將變量綁定到名稱。所以就像我們可以說let x = 2;,我們可以說let f = fun ...,因爲函數只是另一個值。

相關問題