两种方法来定义一个函数
问题描述:
为什么有两种方法来定义原因, 函数,是多么的正是他们的不同(包括编译成相同的JavaScript)两种方法来定义一个函数
let f1 = fun (a) => 123;
let f2 a => 123;
答
实际上有三种功能定义形式:
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 ...
,因为函数只是另一个值。
请参阅https://reasonml.github.io/guide/language/function,尤其是以'由于函数定义经常出现......' – Yawar