> LeekScript-zelfstudie
Deze pagina is alleen geldig voor LS1, in LS2 en meer mag je @ niet meer gebruiken
In Leekscript, als je het nog niet gemerkt hebt, is er een limiet van 20 miljoen bewerkingen per beurt. Optimalisatie is daarom een sleutel tot de overwinning. Dit artikel gaat dieper in op het gedrag van de '@', een zeer populaire tool.
Het belangrijkste gebruik ligt dicht bij referenties, dat wil zeggen dat kopieën van waarde worden vermeden.
De volgende uitleg dient om een idee te geven van het mechanisme achter het apenstaartje. Het vormt geen exacte technische beschrijving omdat de bronnen van de momenteel gebruikte versie van LeekScript niet beschikbaar zijn.
0; ""; []; functie(x) { geef x terug; };
Wanneer u een object rechtstreeks met een letterlijke waarde maakt (zie hierboven), neemt dit ruimte in het geheugen in beslag. Om het te kunnen gebruiken, moet je weten waar je het kunt vinden. We zullen deze positie het adres van het object noemen. Wanneer u een object aan een variabele toewijst, wordt er een kopie van dat object gemaakt en vervolgens wordt het adres aan de variabele verstrekt. In plaats van het adres van een kopie op te geven, kunnen we vragen om het adres van het oorspronkelijke object te gebruiken, om een kopie te voorkomen, door de rechteruitdrukking te laten voorafgaan door het gelijkteken van een at. (linkerhand=@right_hand)
var w = 0; // Er wordt een kopie van 0 gemaakt en het adres van deze kopie wordt verstrekt. var x =@ 0; // Het adres van 0 wordt verstrekt. (Elke letterlijke waarde in de code is een ander object.) laat y = w; // Er wordt een kopie van de kopie van 0 gemaakt en het adres van deze kopie wordt verstrekt. var z =@w; // Het adres van de kopie van 0 wordt verstrekt.
Het apenstaartje wordt toegepast met de hoogste prioriteit. Dus x=@y+z zal niet doen wat je je misschien had voorgesteld. De equivalente uitdrukking is x = (@x) + y. Als u het adres wilt toewijzen, moet u haakjes toevoegen om aan te geven waarop het apenstaartje van toepassing is: x =@ (x + y).
--- Bewerkingen op nummers muteren niet. Wanneer u operatoren zoals += gebruikt, is het resultaat een nieuw object. Dit verschilt van arrays en tekenreeksen omdat de laatste twee structuren zijn en hun inhoud wordt gewijzigd. Om het wat makkelijker te maken om te begrijpen hoe dit werkt, helpt het om de uitdrukkingen wat uit te breiden. x += 1 wordt x = x + 1, we merken op dat er sprake is van hertoewijzing. Terwijl x += [1] wordt x[count(x)] = 1 of push(x, 1)/pushAll(x, [1]); het is duidelijk dat de variabele x niet opnieuw wordt toegewezen.
Evenzo, wanneer u een object als argument aan een functie doorgeeft, wordt er een kopie gemaakt en wordt het adres van deze kopie aan de parameter verstrekt. In tegenstelling tot het toewijzen aan een variabele, heeft het prefixen van een parameter met een apenstaartje iets complexer gedrag bij het toepassen van de functie:
In het zeldzame geval dat u een kopie wilt doorgeven in plaats van het adres van de variabele, kunt u het argument laten voorafgaan door een apenstaartje: at(@zero).
Het meest stabiele en praktische gebruik ervan is in de parameters van een functie:
functie with_a (@ param1 ) { } // Waar we de confrontatie mee gaan aangaan: functie zonder_a ( param1 ) { }
Opmerking: Als u de parameter in de functie wijzigt, vindt deze wijziging ook plaats in de variabele van het aanroepende programma, omdat de opgegeven waarde uw variabele is, niet de waarde ervan, bijvoorbeeld:
functie add_1 (@param) { parameter += 1; }
laat a = 5; add_1(a); debuggen(a); // geeft weer: '6'
Let op: Het aanroepen van een functie kost 1 handeling. Deze kosten zijn in mindering gebracht op de volgende resultaten.
Onbewerkte gegevens doorgeven Een variabele doorgeven Gegevens doorgegeven als parameter zonder de '@' met de '@' kosten van toewijzing aan de variabele (cf Assignment) zonder de ' @ ' met de '@' 42 2 1 2 2 0 "een tekenreeks" 2 1 2 2 0 functie () {} 2 1 2 2 0 [42, -42, 42] 116 34 116 83 0 ["
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.