Das &
Meta-Funktion (Alternative Eingabe- / Ausgabespezifikation)
Die traditionelle Art, die Anzahl der Eingabeargumente anzugeben, die an eine Funktion übergeben werden sollen, ist die Verwendung der $
Meta-Funktion
2$: % Two-input version of :
Um die Anzahl der Ausgabeargumente festzulegen, können Sie auch die #
Meta-Funktion verwenden, die entweder die Anzahl der Ausgabeargumente angibt.
2#S % Two-output version of sort
Übergeben Sie eine Zahl, die größer ist als die Anzahl der für eine Funktion definierten Ausgabeargumente, wird nur die mod(N, numberOfOutputs) + 1
Ausgabe bereitgestellt.
4#S % Get only the second output of sort
Sie können zusätzlich ein logisches Array als Eingabe angeben #
, um nur bestimmte Ausgabeargumente abzurufen.
TFT#u % Three output version of unique and discard the second output
Alle diese Eingabe- / Ausgabespezifikationen sind praktisch , erhöhen jedoch die Bytezahl sehr schnell. Um dies zu bewältigen, hat MATL die &
Meta-Funktion in Version 17.0.0 eingeführt . Dies&
Metafunktion fungiert als Verknüpfung für eine bestimmte Eingabe- oder Ausgabespezifikation für eine Funktion. Mal sehen, was das bedeutet.
In unserem obigen Beispiel wollten wir die Version von mit zwei Eingängen verwenden :
(erstellt einen Vektor mit Werten mit gleichem Abstand). Während die Standardanzahl von Eingangsargumente :
IS 1
(ein Array aus erzeugt [1...N]
), ist es sehr üblich , dass ein Benutzer den Startwert des Bereichs spezifizieren möchte , die den zweiten Eingang erfordert. Also für :
haben wir definiert &
für eine Verknüpfung zu sein 2$
.
10 % Push 10 to the stack
12 % Push 12 to the stack
2$: % Create an array: [10, 11, 12]
Jetzt wird folgendes, ein Byte speichern !
10 12 &:
Wie können wir die alternative Anzahl von Argumenten bestimmen?
Die Eingabe- / Ausgabespezifikation, in die &
übersetzt wird, ist funktionsspezifisch , sodass wir die Byte-Einsparungen optimieren.
Der Abschnitt mit den Eingabe- / Ausgabeargumenten in der Hilfebeschreibung für jede Funktion wurde aktualisiert, um anzugeben, um welche alternative Anzahl von Ein- / Ausgängen es sich handelt (falls vorhanden). Die mögliche Anzahl der Eingabe- oder Ausgabeargumente wird als Bereich angezeigt und die Standardwerte für jedes Argument sind in Klammern angegeben. Die Eingabe- / Ausgabespezifikation, durch die ersetzt werden kann, &
wird nach dem /
Zeichen in Klammern angezeigt .
Hier ist der Abschnitt mit den Ein- / Ausgabeargumenten in der Hilfebeschreibung für :
+- Min-Max range of # of inputs
| +----- Alt. Default # of inputs
| |
V V
1--3 (1 / 2); 1 <--- Possible / Default # of outputs
^
|
Default # of inputs
Wie hast du was festgestellt? &
für jede Funktion bedeutet?
Sehr vorsichtig. Mithilfe der StackExchange-API konnten wir alle MATL-Antworten herunterladen, die jemals in einer PPCG-Herausforderung verwendet wurden. Durch Analysieren jeder der Antworten konnten wir dann die Häufigkeit bestimmen, mit der jede Eingabe- / Ausgabespezifikation für jede Funktion verwendet wurde. Anhand dieser Informationen konnten wir dann objektiv die Eingabe- / Ausgabespezifikation identifizieren, die die &
Metafunktion für jede Funktion darstellen sollte. Manchmal gab es keinen klaren Sieger, so viele Funktionen haben sich derzeit nicht &
definiert.
Hier ist das Skript, das wir verwendet haben (leider ist es in MATLAB geschrieben und nicht MATL geschrieben).
Und hier ist ein Beispiel für das Histogramm von $
/ #
usage