Otwarte argumenty funkcji z maszynopis

głosy
82

IMO, jeden z głównych problemów w maszynopisie języka jest wspieranie istniejącego wanilię kodu JavaScript. To wrażenie miałem na pierwszy rzut oka. Spójrz na poniższej funkcji JavaScript, która jest całkowicie poprawny:

Uwaga: Nie mówię, że lubię takie podejście. Ja tylko mówię, że jest to ważny kod JavaScript.

function sum(numbers) { 

    var agregatedNumber = 0; 
    for(var i = 0; i < arguments.length; i++) { 
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}

Tak więc zużywają tej funkcji z dowolnej liczby argumentów:

console.log(sum(1, 5, 10, 15, 20));

Jednak, gdy staram się z tym maszynopis Playground , daje kompilacji błędów czasowych.

Jestem zakładając, że jest to błąd. Załóżmy, że nie mamy problemów z kompatybilnością. Następnie, czy istnieje jakiś sposób, aby napisać tego rodzaju funkcji z otwartych argumentów? Takie jak paramsfunkcja w C #?

Utwórz 02/10/2012 o 20:52
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
195

Sposób, maszynopis z tego rozwiązania jest to, aby umieścić operator wielokropka ( ...) przed nazwą argumentu. Powyższe będzie zapisana jako,

function sum(...numbers: number[]) {
    var aggregateNumber = 0;
    for (var i = 0; i < numbers.length; i++)
        aggregateNumber += numbers[i];
    return aggregateNumber;
}

Ten typ kontroli będzie wtedy poprawnie

console.log(sum(1, 5, 10, 15, 20));
Odpowiedział 02/10/2012 o 20:57
źródło użytkownik

głosy
2

Oprócz @chuckj odpowiedź: Można również użyć wyrażenia lambda w maszynopisie

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Odpowiedział 19/03/2017 o 09:37
źródło użytkownik

głosy
0

W maszynopisie to pojęcie Rest parametru , to parametr, który otrzymuje wiele wartości o podobnym type.If kierujemy maszynopis następnie musimy napisać kod ECMAScript 6 standardu, wówczas maszynopis transpiler konwertuje go do kodu skryptu java równoważne ( który jest ECMAScript 5 standard) .Jeżeli używamy maszynopis wtedy musimy użyć trzy kropki (...) preferx z nazwą zmiennej restparameter, takich jak sumy funkcji (... numery: numer []), to będzie działać.

Uwaga: Reszta parametrów musi być ostatni parametr w funkcji sumy parametr list.likewise (nazwa: string, wiek: Numer ... numery: numer []).

Odpowiedział 10/05/2018 o 06:56
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more