ανοικτού τύπου επιχειρήματα συνάρτηση με γραφομηχανή

ψήφοι
82

Του ΙΜΟ, ένα από τα κύρια μελήματα της γραφομηχανή γλώσσας είναι να υποστηρίξει την υπάρχουσα βανίλια κώδικα JavaScript. Αυτή είναι η εντύπωση που είχα με την πρώτη ματιά. Ρίξτε μια ματιά στην ακόλουθη λειτουργία JavaScript που είναι απόλυτα έγκυρη:

Σημείωση: δεν λέω ότι μου αρέσει αυτή η προσέγγιση. Είμαι απλά λέγοντας ότι αυτό είναι ένα έγκυρο κώδικα JavaScript.

function sum(numbers) { 

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

    return agregatedNumber;
}

Έτσι, καταναλώνουμε αυτή τη λειτουργία με οποιονδήποτε αριθμό επιχειρήματα:

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

Ωστόσο, όταν προσπαθώ αυτό έξω με γραφομηχανή χαρά , δίνει σφάλματα μεταγλώττισης του χρόνου.

Υποθέτω ότι πρόκειται για ένα σφάλμα. Ας υποθέσουμε ότι δεν έχουμε τα προβλήματα συμβατότητας. Στη συνέχεια, υπάρχει κάποιος τρόπος να γράψω αυτό το είδος των λειτουργιών με ανοιχτές επιχειρήματα εκεί; Όπως η paramsδυνατότητα σε C #;

Δημοσιεύθηκε 02/10/2012 στις 20:52
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
195

Ο τρόπος με γραφομηχανή για να γίνει αυτό είναι να τοποθετήσετε το χειριστή αποσιωπητικά ( ...) πριν από το όνομα του επιχειρήματος. Το παραπάνω θα μπορούσε να γραφτεί ως,

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

Αυτό στη συνέχεια τον τύπο ελέγξει σωστά με

console.log(sum(1, 5, 10, 15, 20));
Απαντήθηκε 02/10/2012 στις 20:57
πηγή χρήστη

ψήφοι
2

Εκτός από @chuckj απάντηση: Μπορείτε επίσης να χρησιμοποιήσετε μια έκφραση λάμδα στη γραφομηχανή

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Απαντήθηκε 19/03/2017 στις 09:37
πηγή χρήστη

ψήφοι
0

Σε γραφομηχανή είναι η έννοια της Rest Παράμετρος , είναι η παράμετρος η οποία δέχεται πολλαπλές τιμές των παρόμοιων type.If στοχεύουμε την γραφομηχανή τότε έχουμε να γράψουμε τον κώδικα ECMAScript 6 πρότυπο, τότε γραφομηχανή transpiler το μετατρέπει σε κώδικα του script ισοδύναμο Java ( που είναι ECMAScript 5 στάνταρ) .Αν χρησιμοποιούμε γραφομηχανή τότε θα πρέπει να χρησιμοποιήσετε τις τρεις τελείες (...) preferx με το όνομα της μεταβλητής restparameter, όπως άθροισμα λειτουργία (... αριθμούς: τον αριθμό []), τότε θα μπορούσε να λειτουργήσει.

Σημείωση: Υπόλοιπο παράμετρος πρέπει να είναι η τελευταία παράμετρος στο ποσό συνάρτηση παραμέτρων list.likewise (όνομα: string, ηλικία: αριθμός, ... αριθμούς: τον αριθμό []).

Απαντήθηκε 10/05/2018 στις 06:56
πηγή χρήστη

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