> LeekScript vejledning
Denne side er kun gyldig for LS1, i LS2 og mere bør du ikke længere bruge @
I Leekscript, hvis du ikke har bemærket det endnu, er der en grænse for operationer per tur, som er 20 mio. Optimering er derfor nøglen til sejr. Denne artikel vil gå i dybden med opførselen af '@', som er et meget populært værktøj.
Dens hovedanvendelse er tæt på referencer, det vil sige, at kopier af værdi undgås.
Den følgende forklaring tjener til at give en intuition af mekanismen bag ved tegnet. Det udgør ikke en nøjagtig teknisk beskrivelse, fordi kilderne til den version af LeekScript, der i øjeblikket anvendes, ikke er tilgængelige.
0; ""; []; function(x) { return x; };
Når du opretter et objekt direkte ved hjælp af en bogstavelig (se ovenfor), optager det plads i hukommelsen. For at kunne bruge det, skal du vide, hvor du kan finde det. Vi vil kalde denne position for objektets adresse. Når du tildeler et objekt til en variabel, laves en kopi af det objekt, og derefter gives adressen til variablen. I stedet for at oplyse en kopis adresse, kan vi anmode om, at adressen på det originale objekt bruges, for at undgå en kopi, ved at foranstille højrehåndsudtrykket med lighedstegnet af en at. (venstre_hånd=@højre_hånd)
var w = 0; // Der laves en kopi af 0, og adressen på denne kopi oplyses. var x =@ 0; // Adressen på 0 er angivet. (Hvert bogstav i koden er et andet objekt.) lad y = w; // Der laves en kopi af kopien af 0, og adressen på denne kopi oplyses. var z =@w; // Adressen på kopien af 0 er angivet.
At-tegnet anvendes med højeste prioritet. Så x=@y+z vil ikke gøre, hvad du måske havde forestillet dig. Det ækvivalente udtryk er x = (@x) + y. Hvis du vil tildele adressen, skal du tilføje parenteser for at angive, hvad at-tegnet gælder for: x =@ (x + y).
--- Operationer på tal muterer ikke. Når du bruger operatorer som +=, er resultatet et nyt objekt. Dette adskiller sig fra arrays og tegnstrenge, fordi de to sidstnævnte er strukturer, og det er deres indhold, der ændres. For at gøre det lidt nemmere at forstå, hvordan dette fungerer, hjælper det at udvide udtrykkene en smule. x += 1 bliver x = x + 1, vi bemærker, at der er omfordeling. Mens x += [1] bliver x[count(x)] = 1 eller push(x, 1)/pushAll(x, [1]); det er tydeligt, at variablen 'x' ikke er gentildelt.
På samme måde, når du sender et objekt som et argument til en funktion, laves en kopi, og adressen på denne kopi gives til parameteren. Men i modsætning til at tildele til en variabel, har præfiks for en parameter med et at-tegn en lidt mere kompleks adfærd, når funktionen anvendes:
I det sjældne tilfælde, hvor du vil videregive en kopi i stedet for variablens adresse, kan du foran argumentet have et at-tegn: at(@nul).
Dens mest stabile og praktiske brug er i en funktions parametre:
funktion med_a (@ param1 ) { } // Hvilket vi skal konfrontere med: funktion uden_a (param1) { }
Bemærk: Hvis du ændrer parameteren i funktionen, vil denne ændring også finde sted i variablen i det kaldende program, fordi den angivne værdi er din variabel, ikke værdien af den, for eksempel:
funktion add_1 (@param) { param += 1; }
lad a = 5; tilføje_1(a); debug(a); // viser: '6'
Bemærk: At kalde en funktion koster 1 operation. Denne omkostning blev trukket fra følgende resultater.
Gennemføring af rådata Gennemførsel af en variabel Data sendt som parameter uden '@' med '@' omkostningerne ved tildeling til variablen (jf. Assignment) uden ' @ ' med '@' 42 2 1 2 2 0 "en streng" 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.