2012-04-10 82 views
2

http://www.dartlang.org/language-tour/#functions有人能解释我这个简单的功能是如何工作的

Function makeAdder(num n) { 
    return (num i) => n + i; 
} 

main() { 
    var add2 = makeAdder(2); 
    print(add2(3)); // 5 
} 

你能翻译成英文这个....

是什么在困扰我不理解它是如何工作的,并它的工作原理..

它应该是这样的var add2 = makeAdder;,然后在print(add2(3));但后来它不会工作...

+0

我想确实当i或n被定义,或者如何通过一个相同的参数i无法理解。 – 2012-04-10 05:35:53

+1

这看起来不像JavaScript。编辑:它似乎来自http://www.dartlang.org/language-tour/ - 编辑标签。 – AKX 2012-04-10 05:43:34

+0

我包括标签说镖....我相信这个功能是非常相似,如果不是所有,但至少在JavaScript ...反正我真的卡在这里。 – 2012-04-10 05:46:38

回答

2

每次调用makeAdder(num n)创建并返回一个新的功能,通过lambda表达式定义 - (num i) => n + inmadeAdder声明,而i用lambda表达式声明。

由此,makeAdder(2)实质上返回新功能(num i) => 2 + i,其被设置为add2的值。

然后这称为add2(3),其评估n + i2 + 3,导致5


这也是currying一个例子:

madeAdder(2)(3); // 5 
+0

:'(:'(:'(:'(:'( – 2012-04-10 08:05:46

+0

@MuhammadUmer对不起,编辑,希望清晰。 – 2012-04-10 08:47:54

+0

非常感谢,我学到了很多东西:D – 2012-04-12 01:26:49

3

翻译这JavaScript语法 - 希望这有助于:

function makeAdder(n) { 
    // Returns a new function (closure) that captures the local variable `n`, as 
    // it was passed to this function. So if `n` is 10, this function essentially 
    // becomes function(i) { return 10 + i; };. 
    return function(i) { return n + i; }; 
} 

function main() { 
    // add2 is now a function that adds 2 to its given argument. 
    var add2 = makeAdder(2); 
    print(add2(3)); // 5 is passed to add2 -- the result is 2 + 3 = 5. 
} 
+0

即使它在一开始没有意义,现在它有点...谢谢。 – 2012-04-12 01:27:43

相关问题