> LeekScript-veiledning
Denne siden er kun gyldig for LS1, i LS2 og mer bør du ikke lenger bruke @
I Leekscript, hvis du ikke har lagt merke til det ennå, er det en grense for operasjoner per tur som er 20 millioner. Optimalisering er derfor nøkkelen til seier. Denne artikkelen vil gå i dybden på oppførselen til '@', som er et veldig populært verktøy.
Hovedbruken er nær referanser, det vil si at kopier av verdi unngås.
Følgende forklaring tjener til å gi en intuisjon av mekanismen bak ved-tegnet. Det utgjør ikke en eksakt teknisk beskrivelse fordi kildene til versjonen av LeekScript som brukes for øyeblikket ikke er tilgjengelige.
0; ""; []; function(x) { return x; };
Når du oppretter et objekt direkte ved hjelp av en bokstavelig (se ovenfor), tar det opp plass i minnet. For å kunne bruke den, må du vite hvor du finner den. Vi vil kalle denne posisjonen objektets adresse. Når du tilordner et objekt til en variabel, lages en kopi av det objektet, og deretter gis adressen til variabelen. I stedet for å oppgi adressen til en kopi, kan vi be om at adressen til originalobjektet brukes, for å unngå en kopi, ved å prefiksere det høyre uttrykket med likhetstegnet til en at. (venstre_hånd=@høyre_hånd)
var w = 0; // En kopi av 0 lages og adressen til denne kopien oppgis. var x =@ 0; // Adressen til 0 er oppgitt. (Hver bokstav i koden er et annet objekt.) la y = w; // Det lages en kopi av kopien av 0, og adressen til denne kopien oppgis. var z =@w; // Adressen til kopien av 0 er oppgitt.
At-tegnet brukes med høyeste prioritet. Så x=@y+z vil ikke gjøre det du kanskje hadde forestilt deg. Det ekvivalente uttrykket er x = (@x) + y. Hvis du vil tilordne adressen, må du legge til parenteser for å spesifisere hva at-tegnet gjelder for: x =@ (x + y).
--- Operasjoner på tall muterer ikke. Når du bruker operatorer som +=, er resultatet et nytt objekt. Dette skiller seg fra arrays og tegnstrenger fordi de to sistnevnte er strukturer og det er innholdet som endres. For å gjøre det litt lettere å forstå hvordan dette fungerer, hjelper det å utvide uttrykkene litt. x += 1 blir x = x + 1, vi legger merke til at det er omfordeling. Mens x += [1] blir x[count(x)] = 1 eller push(x, 1)/pushAll(x, [1]); det er tydelig at variabelen 'x' ikke er tilordnet på nytt.
På samme måte, når du sender et objekt som et argument til en funksjon, lages en kopi og adressen til denne kopien gis til parameteren. Men i motsetning til å tilordne til en variabel, har prefiks for en parameter med et at-tegn en litt mer kompleks oppførsel når du bruker funksjonen:
I de sjeldne tilfellene du ønsker å sende en kopi i stedet for adressen til variabelen, kan du prefiksere argumentet med et at-tegn: at(@null).
Den mest stabile og praktiske bruken er i en funksjons parametere:
funksjon med_a (@ param1 ) { } // Som vi skal konfrontere med: funksjon uten_a (param1) { }
Merk: Hvis du endrer parameteren i funksjonen, vil denne endringen også finne sted i variabelen til det kallende programmet, fordi verdien som er gitt er variabelen din, ikke verdien av den, for eksempel:
funksjon add_1 (@param) { param += 1; }
la a = 5; add_1(a); feilsøke(a); // viser: '6'
Merk: Å ringe en funksjon koster 1 operasjon. Denne kostnaden ble trukket fra følgende resultater.
Gå gjennom rådata Gå gjennom en variabel Data sendt som parameter uten '@' med '@' kostnaden for tilordning til variabelen (jf Assignment) uten ' @ ' med '@' 42 2 1 2 2 0 "en streng" 2 1 2 2 0 funksjon () {} 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.