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)、ラムダ式で定義された新しい関数が作成されて返されます- (num i) => n + i。は、ラムダ式でn宣言されています。madeAdderi

これにより、基本的に、の値として設定されたmakeAdder(2)新しい関数を返します。(num i) => 2 + iadd2

これは、と呼ばれadd2(3)、と評価さn + i2 + 3、結果として。になり5ます。


これはカリー化の例でもあります:

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