Verhalten von @

Verhalten von @

> LeekScript-Tutorial

Diese Seite gilt nur für LS1, in LS2 und mehr sollten Sie @ nicht mehr verwenden

Wenn Sie es noch nicht bemerkt haben, gibt es in Leekscript ein Limit von Operationen pro Runde, das 20 Millionen beträgt. Optimierung ist daher ein Schlüssel zum Sieg. Dieser Artikel wird detailliert auf das Verhalten des „@“ eingehen, das ein sehr beliebtes Werkzeug ist.

Seine Hauptanwendung liegt in der Nähe von Referenzen, dh Wertkopien werden vermieden.

Zusammengefasste Erklärung

Die folgende Erklärung dient dazu, den Mechanismus hinter dem at-Zeichen erahnen zu lassen. Es stellt keine exakte technische Beschreibung dar, da die Quellen der aktuell verwendeten Version von LeekScript nicht verfügbar sind.

0; ""; []; Funktion(x) {Rückgabe x; };

Abtretung

Wenn Sie ein Objekt direkt mit einem Literal erstellen (siehe oben), nimmt es Speicherplatz in Anspruch. Um es nutzen zu können, muss man wissen, wo man es findet. Wir nennen diese Position die Adresse des Objekts. Wenn Sie einer Variablen ein Objekt zuweisen, wird eine Kopie dieses Objekts erstellt, und dann wird die Adresse der Variablen bereitgestellt. Anstatt die Adresse einer Kopie anzugeben, können wir verlangen, dass die Adresse des Originalobjekts verwendet wird, um eine Kopie zu vermeiden, indem wir dem rechten Ausdruck das Gleichheitszeichen a voranstellen. (linke_hand=@rechte_hand)

Var w = 0; // Es wird eine Kopie von 0 erstellt und die Adresse dieser Kopie bereitgestellt. var x =@ 0; // Die Adresse 0 wird bereitgestellt. (Jedes Literal im Code ist ein anderes Objekt.) sei y = w; // Es wird eine Kopie der Kopie von 0 erstellt und die Adresse dieser Kopie bereitgestellt. varz =@w; // Die Adresse der Kopie von 0 wird bereitgestellt.

Das at-Zeichen wird mit höchster Priorität angewendet. x=@y+z wird also nicht das tun, was Sie sich vielleicht vorgestellt haben. Der äquivalente Ausdruck ist x = (@x) + y. Wenn Sie die Adresse zuweisen möchten, müssen Sie Klammern hinzufügen, um anzugeben, wofür das at-Zeichen gilt: x =@ (x + y).

Sonderfälle

--- Operationen auf Zahlen mutieren nicht. Wenn Sie Operatoren wie += verwenden, ist das Ergebnis ein neues Objekt. Dies unterscheidet sich von Arrays und Zeichenfolgen, da die beiden letzteren Strukturen sind und ihr Inhalt geändert wird. Um die Funktionsweise etwas verständlicher zu machen, hilft es, die Ausdrücke etwas zu erweitern. x += 1 wird zu x = x + 1, wir stellen fest, dass es eine Neuzuweisung gibt. Während x += [1] zu x[count(x)] = 1 oder push(x, 1)/pushAll(x, [1]) wird; es ist klar, dass die Variable "x" nicht neu zugewiesen wird.

Einstellung

Wenn Sie ein Objekt als Argument an eine Funktion übergeben, wird eine Kopie erstellt und die Adresse dieser Kopie an den Parameter übergeben. Im Gegensatz zur Zuweisung an eine Variable hat das Präfixieren eines Parameters mit einem at-Zeichen jedoch ein etwas komplexeres Verhalten beim Anwenden der Funktion:

In dem seltenen Fall, dass Sie statt der Adresse der Variablen eine Kopie übergeben möchten, können Sie dem Argument ein at-Zeichen voranstellen: at(@zero).

In-Parameter

Seine stabilste und praktischste Verwendung findet sich in den Parametern einer Funktion:

Funktion mit_a (@ param1 ) { } // Womit wir konfrontiert werden: Funktion whitout_a ( param1 ) { }

Hinweis: Wenn Sie den Parameter in der Funktion ändern, findet diese Änderung auch in der Variablen des aufrufenden Programms statt, da der angegebene Wert Ihre Variable ist, nicht deren Wert, zum Beispiel:

Funktion add_1 (@param) { Parameter += 1; }

sei a = 5; add_1(a); debuggen(a); // zeigt: '6'

Hinweis: Der Aufruf einer Funktion kostet 1 Vorgang. Diese Kosten wurden von den folgenden Ergebnissen abgezogen.

Rohdaten übergeben Variable übergeben Als Parameter übergebene Daten ohne das '@' mit dem '@' Kosten der Zuweisung an die Variable (vgl. Zuweisung) ohne das ' @ ' mit dem '@' 42 2 1 2 2 0 "eine Zeichenkette" 2 1 2 2 0 Funktion () {} 2 1 2 2 0 [42, -42, 42] 116 34 116 83 0 ["