> LeekScript handledning
Denna sida är endast giltig för LS1, i LS2 och mer ska du inte längre använda @
I Leekscript, om du inte har märkt det ännu, finns det en gräns för operationer per tur som är 20 miljoner. Optimering är därför en nyckel till seger. Den här artikeln kommer att gå in på djupet om beteendet hos "@" som är ett mycket populärt verktyg.
Dess huvudsakliga användning är nära referenser, det vill säga kopior av värde undviks.
Följande förklaring tjänar till att ge en intuition av mekanismen bakom vid-tecknet. Det utgör ingen exakt teknisk beskrivning eftersom källorna till den version av LeekScript som för närvarande används inte är tillgängliga.
0; ""; []; function(x) { return x; };
När du skapar ett objekt direkt med hjälp av en bokstavlig (se ovan) tar det plats i minnet. För att kunna använda den måste du veta var du hittar den. Vi kommer att kalla denna position för objektets adress. När du tilldelar ett objekt till en variabel, görs en kopia av det objektet, och sedan ges adressen till variabeln. Istället för att ange adressen till en kopia kan vi begära att originalobjektets adress används, för att undvika en kopia, genom att det högra uttrycket sätts in med likhetstecknet på en at. (left_hand=@right_hand)
var w = 0; // En kopia av 0 görs och adressen till denna kopia anges. var x =@ 0; // Adressen till 0 anges. (Varje bokstav i koden är ett annat objekt.) låt y = w; // En kopia av kopian av 0 görs och adressen till denna kopia anges. var z =@w; // Adressen till kopian av 0 anges.
At-tecknet tillämpas med högsta företräde. Så x=@y+z kommer inte att göra vad du kanske har föreställt dig. Det ekvivalenta uttrycket är x = (@x) + y. Om du vill tilldela adressen måste du lägga till parenteser för att ange vad at-tecknet gäller för: x =@ (x + y).
--- Operationer på siffror muterar inte. När du använder operatorer som += blir resultatet ett nytt objekt. Detta skiljer sig från arrayer och teckensträngar eftersom de två sistnämnda är strukturer och det är deras innehåll som modifieras. För att göra det lite lättare att förstå hur det här fungerar så hjälper det att utöka uttrycken lite. x += 1 blir x = x + 1, vi noterar att det finns omtilldelning. Medan "x += [1]" blir "x[count(x)] = 1" eller "push(x, 1)"/"pushAll(x, [1])". det är tydligt att variabeln "x" inte är omtilldelad.
På samma sätt, när du skickar ett objekt som ett argument till en funktion, görs en kopia och adressen till denna kopia ges till parametern. Men till skillnad från att tilldela en variabel, har prefixet för en parameter med ett at-tecken ett något mer komplext beteende när funktionen tillämpas:
I det sällsynta fallet att du vill skicka en kopia snarare än adressen till variabeln, kan du prefixa argumentet med ett at-tecken: at(@noll).
Dess mest stabila och praktiska användning är i en funktions parametrar:
funktion med_a (@ param1 ) { } // Som vi kommer att konfrontera med: function whitout_a (param1) { }
Obs: Om du modifierar parametern i funktionen kommer denna modifiering också att ske i variabeln för det anropande programmet, eftersom det angivna värdet är din variabel, inte värdet på den, till exempel:
function add_1 (@param) { param += 1; }
låt a = 5; add_1(a); debug(a); // visar: '6'
Obs! Att anropa en funktion kostar 1 operation. Denna kostnad drogs av från följande resultat.
Genomförda rådata Passera genom en variabel Data som skickas som parameter utan '@' med '@' kostnaden för tilldelning till variabeln (jfr Assignment) utan ' @ ' med '@' 42 2 1 2 2 0 "en sträng" 2 1 2 2 0 funktion () {} 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.