Viele Sprachen können eine beliebige Anzahl von Funktionsargumenten übergeben, aber jede hat leicht unterschiedliche Spezifikationen.
In der C-Sprache besteht printf
, das zuerst beim Lernen verwendet wird, ebenfalls aus Argumenten variabler Länge, aber es ist überraschend schwierig, eine solche Funktion zu erstellen.
Eine Datei mit dem Namen "stdargs.h" enthält Makros für Argumente variabler Länge.
va_start
… Initialisierung des Argumentzeigersva_arg
… Argument bekommenva_end
… Bereinigen Sie den ArgumentzeigerDie Merkmale der Implementierung sind wie folgt.
va_start
werden.JavaScript
Im Fall von JavaScript bis ES5 gibt es keine spezielle Notation, die als Argument mit variabler Länge bezeichnet wird, aber sie entspricht dem Argument mit variabler Länge selbst, da es kein Problem gibt, selbst wenn die Zahlen nicht zwischen dem formalen Argument und dem tatsächlichen Argument übereinstimmen. Ich kann es schaffen
In einer JavaScript-Funktion sind die Argumente in einem "Array-ähnlichen Objekt" namens "Argumente" enthalten, und Sie können die Anzahl der Argumente mit "Argumente.Länge" abrufen. Wenn es ein formales Argument gibt, gab es außerdem das Verhalten, dass das Element "Argumente" an derselben Position wie das formale Argument verknüpft ist, aber es wird im strengen Modus von ES5 abgeschafft.
Sie können den Index einfach mit "für" drehen oder, wenn Sie ihn in ein reales Array konvertieren möchten, mit "Array.prototype.slice.call (Argumente)".
Wenn Sie den Inhalt des Arrays in eine Argumentliste konvertieren möchten, können Sie dies mit der Funktion .apply (Objekt, Array) tun.
ES6
In ES6 ist es möglich, "Argumente variabler Länge als Array zu empfangen" und "ein Array usw. zu erweitern und an die Argumente zu übergeben" mit demselben "..." (Spread-Operator) wie PHP. Beachten Sie, dass in der Pfeilfunktion von ES6 (Funktionsnotation mit =>
) Argumente
auch ** erbt, was sich außerhalb ** befindet ([MDN](https: //developer.mozilla). org / ja / docs / Web / JavaScript / Referenz / Pfeilfunktionen)). Schreiben wir es gehorsam mit dem Spread-Operator.
Ruby Ruby unterstützt explizit Argumente variabler Länge und verwendet die genaue Anzahl der Argumente. Wenn bei der Deklaration eines formalen Arguments ein Argument mit dem Präfix "*" angegeben wird, werden die verbleibenden Argumente als Array empfangen (von Natur aus kann nur eines in die Argumentliste geschrieben werden).
Anzahl der Argumente
def foo (arg1, *rest)
#Benötigt mindestens ein Argument
end
def bar (*args)
#Kein Problem
end
def baz (*args, last)
#Separat*Das angehängte Argument muss nicht das letzte sein
end
Wenn Sie ein Array erweitern und als Argument verwenden möchten, können Sie es erweitern, indem Sie wie "method (* arr)" schreiben.
PHP Im Fall von PHP hat PHP 5.6 oder höher die Syntax "..." und wie "*" in Ruby werden Argumente variabler Länge automatisch in ein Array gepackt. Sie können dieser Argumentliste auch Typhinweise hinzufügen.
Selbst in PHP 5.5 und früheren Versionen kann die Funktion mehr Argumente als das formale Argument empfangen und von Funktionen wie "func_get_args" und "func_num_args" verarbeitet werden.
Wenn Sie ein Array als Argument erweitern möchten, können Sie "..." in PHP 5.6 und höher verwenden, und sogar vorher können Sie "call_user_func_array" verwenden.
Recommended Posts