2012-04-10 10 views
2

Von http://www.dartlang.org/language-tour/#functions:Könnte mir jemand erklären, wie diese einfache Funktion funktioniert

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

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

Könnten Sie dies in Englisch übersetzen ....

was stört mich verstehen nicht, wie es funktioniert, und es funktioniert ..

sollte es so var add2 = makeAdder; sein und dann bei print(add2(3)); aber dann wird es nicht funktioniert ...

+0

ich denke, ich kann nicht verstehen, wenn tut i oder n wird definiert, oder wie durch einen gleichen Parameter. –

+1

Dies sieht nicht wie JavaScript aus. EDIT: Es scheint, dass es von http://www.dartlang.org/language-tour/ - Bearbeiten von Tags ist. – AKX

+0

Ich habe Tag sagen Dart .... und ich glaube diese Funktionalität ist sehr ähnlich, wenn in nicht alle, aber zumindest in Javascript ... sowieso bin ich wirklich hier stecken. –

Antwort

2

Jeder Aufruf von makeAdder(num n) erstellt und gibt eine neue Funktion, die von Lambda-Ausdruck definiert - (num i) => n + i. Die n ist mit madeAdder deklariert, während i mit dem Lambda-Ausdruck.

Damit gibt makeAdder(2) im Wesentlichen die neue Funktion (num i) => 2 + i zurück, die als Wert add2 festgelegt ist.

Dies wird dann als add2(3) bezeichnet, was n + i als 2 + 3 auswertet, was zu 5 führt. Diese


ist auch ein Beispiel für currying:

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

: '(:' (: '(:' ( –

+0

@MuhammadUmer Entschuldigung. Bearbeitet, hoffentlich, für Klarheit. –

+0

vielen Dank ich habe viel gelernt: D –

3

Übersetzen dies zu JavaScript-Syntax - hoffe, das hilft:

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

obwohl es am Anfang keinen Sinn machte, ist es jetzt etwas ... danke. –

Verwandte Themen