Otevřené argumenty funkce s psacím stroji

hlasů
82

IMO, je jedním z hlavních obav z strojopisu jazyka je podpořit stávající vanilku JavaScript kód. To je dojem jsem měl na první pohled. Podívejte se na následující funkci JavaScript, která je naprosto v pořádku:

Poznámka: Neříkám, že jsem tento přístup líbí. Já jen říkám, že se jedná o platný kód v JavaScriptu.

function sum(numbers) { 

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

    return agregatedNumber;
}

Takže jsme konzumovat tuto funkci s libovolným počtem argumentů:

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

Nicméně, když se snažím na to s strojopisu hřiště , dává chyby kompilace času.

Jsem za předpokladu, že se jedná o chybu. Předpokládejme, že nemáme problémy s kompatibilitou. Potom je tam nějaký způsob, jak psát tento druh funkcí s otevřenými argumenty? Jako je například paramsfunkce v C #?

Položena 02/10/2012 v 20:52
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
195

Strojopisu způsob, jak toho dosáhnout, je umístit operátor elipsy ( ...) před název argumentu. Výše uvedené by byl psaný as,

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

To pak typem zkontrolovat správně

console.log(sum(1, 5, 10, 15, 20));
Odpovězeno 02/10/2012 v 20:57
zdroj uživatelem

hlasů
2

Kromě @chuckj odpověď: Můžete také použít výraz lambda na psacím stroji

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Odpovězeno 19/03/2017 v 09:37
zdroj uživatelem

hlasů
0

Na stroji je koncept odpočinek parametr je parametr, který přijímá více hodnot podobného type.If se zaměřujeme na strojopis pak budeme muset psát kód ECMAScript 6 standardu, pak strojopisem transpiler převádí jej na jeho ekvivalent Java Script kódu ( což je ECMAScript 5 standard) .Pokud budeme používat strojopis pak musíme použít tři tečky (...) preferx s názvem proměnné restparameter, jako je například funkce Sum (... čísla: číslo []), pak to bude fungovat.

Poznámka: Ostatní parametry musí být poslední parametr ve funkci parametru list.likewise součtu (name: string, věk: číslo, ... čísla: číslo []).

Odpovězeno 10/05/2018 v 06:56
zdroj uživatelem

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