> Tutorial LeekScript
Questa pagina è valida solo per LS1, in LS2 e oltre non dovresti più usare @
In Leekscript, se non l'hai ancora notato, c'è un limite di operazioni per turno che è di 20 milioni. L'ottimizzazione è quindi una chiave per la vittoria. Questo articolo approfondirà i dettagli sul comportamento della '@' che è uno strumento molto popolare.
Il suo utilizzo principale è vicino ai riferimenti, ovvero si evitano copie di valore.
La spiegazione che segue serve a dare un'intuizione del meccanismo che sta dietro alla chiocciola. Non costituisce una descrizione tecnica esatta perché i sorgenti della versione di LeekScript attualmente utilizzata non sono disponibili.
0; ""; []; funzione(x) { ritorno x; };
Quando crei un oggetto direttamente usando un letterale (vedi sopra), occupa spazio in memoria. Per poterlo utilizzare, devi sapere dove trovarlo. Chiameremo questa posizione l'indirizzo dell'oggetto. Quando si assegna un oggetto a una variabile, viene creata una copia di quell'oggetto e quindi viene fornito l'indirizzo alla variabile. Au lieu de fournir l'adresse d'une copie, nous pouvons demander à ce que l'adresse de l'objet original soit utilisée, afin d'éviter une copie, en préfixant l'expression en main droite du signe égal d'un chiocciola. (mano_sinistra=@mano_destra)
variabile w = 0; // Viene creata una copia di 0 e viene fornito l'indirizzo di questa copia. var x =@ 0; // Viene fornito l'indirizzo 0. (Ogni letterale nel codice è un oggetto diverso.) sia y = w; // Viene creata una copia della copia di 0 e viene fornito l'indirizzo di questa copia. varz =@w; // Viene fornito l'indirizzo della copia di 0.
Il segno di chiocciola viene applicato con la massima precedenza. Quindi x=@y+z non farà ciò che avresti potuto immaginare. L'espressione equivalente è x = (@x) + y. Se vuoi assegnare l'indirizzo, dovrai aggiungere le parentesi per specificare a cosa si applica la chiocciola: x =@ (x + y).
--- Le operazioni sui numeri non mutano. Quando usi operatori come +=, il risultato è un nuovo oggetto. Questo differisce dagli array e dalle stringhe di caratteri perché gli ultimi due sono strutture ed è il loro contenuto che viene modificato. Per rendere un po' più facile capire come funziona, aiuta ad espandere un po' le espressioni. x += 1 diventa x = x + 1, notiamo che c'è riassegnazione. Mentre x += [1] diventa x[count(x)] = 1 o push(x, 1)/pushAll(x, [1]); è chiaro che la variabile x non viene riassegnata.
Allo stesso modo, quando si passa un oggetto come argomento a una funzione, viene creata una copia e l'indirizzo di questa copia viene dato al parametro. Tuttavia, a differenza dell'assegnazione a una variabile, il prefisso di un parametro con un segno di chiocciola ha un comportamento leggermente più complesso quando si applica la funzione:
Nel raro caso in cui desideri passare una copia anziché l'indirizzo della variabile, puoi prefissare l'argomento con una chiocciola: at(@zero).
Il suo uso più stabile e pratico è nei parametri di una funzione:
funzione con_a (@ param1 ) { } // Con cui ci confronteremo: funzione senza_a ( param1 ) { }
Nota: Se modifichi il parametro nella funzione, questa modifica avverrà anche nella variabile del programma chiamante, perché il valore dato è la tua variabile, non il suo valore, per esempio:
funzione add_1 (@param) { parametro += 1; }
sia a = 5; aggiungi_1(a); debug(a); // visualizza: '6'
Nota: Chiamare una funzione costa 1 operazione. Questo costo è stato detratto dai seguenti risultati.
Passare attraverso dati grezzi Passare attraverso una variabile Dati passati come parametro senza '@' con '@' costo di assegnazione alla variabile (cfr Assegnazione) senza ' @ ' con '@' 42 2 1 2 2 0 "una stringa" 2 1 2 2 0 funzione () {} 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.