有人可以解释我这个简单的功能是如何工作的

时间:2012-04-10 05:34:43

标签: function parameters closures dart

来自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));但是它不会起作用......

2 个答案:

答案 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 + in声明为madeAdder,而i声明为lambda表达式。

有了这个,makeAdder(2)基本上会返回新函数(num i) => 2 + i,它被设置为add2的值。

然后将其称为add2(3),将n + i评估为2 + 3,结果为5


这也是currying的一个例子:

madeAdder(2)(3); // 5