来自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 :(得分: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.
}
答案 1 :(得分:2)
每次调用makeAdder(num n)
都会创建并返回一个由lambda表达式定义的新函数 - (num i) => n + i
。 n
声明为madeAdder
,而i
声明为lambda表达式。
有了这个,makeAdder(2)
基本上会返回新函数(num i) => 2 + i
,它被设置为add2
的值。
然后将其称为add2(3)
,将n + i
评估为2 + 3
,结果为5
。
这也是currying的一个例子:
madeAdder(2)(3); // 5