> Tutorial de LeekScript
Esta página solo es válida para LS1, en LS2 y más ya no debe usar @
En Leekscript, si aún no te has dado cuenta, hay un límite de operaciones por turno que es de 20 millones. Por lo tanto, la optimización es la clave de la victoria. Este artículo profundizará en el comportamiento de la '@', que es una herramienta muy popular.
Su uso principal es cercano a las referencias, es decir, se evitan las copias de valor.
La siguiente explicación sirve para dar una intuición del mecanismo detrás de la arroba. No constituye una descripción técnica exacta porque las fuentes de la versión de LeekScript actualmente utilizada no están disponibles.
0; ""; []; funcion(x) { devuelve x; };
Cuando crea un objeto directamente usando un literal (ver arriba), ocupa espacio en la memoria. Para poder usarlo, tienes que saber dónde encontrarlo. Llamaremos a esta posición la dirección del objeto. Cuando asigna un objeto a una variable, se hace una copia de ese objeto y luego se proporciona la dirección a la variable. En lugar de proporcionar la dirección de una copia, podemos solicitar que se use la dirección del objeto original, para evitar una copia, anteponiendo la expresión de la derecha con el signo igual de una arroba. (mano_izquierda=@mano_derecha)
var w = 0; // Se hace una copia de 0 y se proporciona la dirección de esta copia. varx =@ 0; // Se proporciona la dirección de 0. (Cada literal en el código es un objeto diferente). sea y = w; // Se hace una copia de la copia de 0 y se proporciona la dirección de esta copia. var z =@w; // Se proporciona la dirección de la copia de 0.
El signo de arroba se aplica con la prioridad más alta. Así que x=@y+z no hará lo que podrías haber imaginado. La expresión equivalente es x = (@x) + y. Si desea asignar la dirección, deberá agregar paréntesis para especificar a qué se aplica el signo de arroba: x =@ (x + y).
--- Las operaciones con números no están mutando. Cuando usa operadores como +=, el resultado es un nuevo objeto. Esto difiere de las matrices y las cadenas de caracteres porque las dos últimas son estructuras y es su contenido el que se modifica. Para que sea un poco más fácil entender cómo funciona esto, ayuda expandir un poco las expresiones. x += 1 se convierte en x = x + 1, notamos que hay reasignación. Mientras que x += [1] se convierte en x[count(x)] = 1 o push(x, 1)/pushAll(x, [1]); es claro que la variable x no se reasigna.
De manera similar, cuando pasa un objeto como argumento a una función, se hace una copia y la dirección de esta copia se le da al parámetro. Sin embargo, a diferencia de la asignación a una variable, anteponer un parámetro con un signo de arroba tiene un comportamiento un poco más complejo al aplicar la función:
En el raro caso de que desee pasar una copia en lugar de la dirección de la variable, puede anteponer el argumento con un signo de arroba: at(@zero).
Su uso más estable y práctico es en los parámetros de una función:
función con_a (@ param1 ) { } // Con lo que nos vamos a enfrentar: función sin_a ( param1 ) { }
Nota: Si modificas el parámetro en la función, esta modificación también se realizará en la variable del programa que llama, porque el valor dado es tu variable, no el valor de ella, por ejemplo:
función agregar_1 (@param) { parámetro += 1; }
sea a = 5; añadir_1(a); depurar (a); // muestra: '6'
Nota: Llamar a una función cuesta 1 operación. Este costo se dedujo de los siguientes resultados.
Pasar datos sin procesar Pasar a través de una variable Datos pasados como parámetro sin '@' con '@' costo de asignación a la variable (cf Assignment) sin ' @ ' con la '@' 42 2 1 2 2 0 "una cadena" 2 1 2 2 0 función () {} 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.