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));但它不会工作......

4

2 回答 2

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.
}
于 2012-04-10T07:00:47.710 回答
2

每次调用makeAdder(num n)都会创建并返回一个由 lambda 表达式定义的新函数 -- (num i) => n + inmadeAdder, 而用ilambda 表达式声明。

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

然后将其称为 as add2(3),计算结果n + i2 + 3,结果为5


这也是柯里化的一个例子:

madeAdder(2)(3); // 5
于 2012-04-10T07:45:17.497 回答