stringtranslate.com

Wikipedia: Lua

WP: Lua (hablar) Ayuda Hacer Recursos Manual de referencia

Lua es un lenguaje de programación que está disponible a través de la extensión Scribunto MediaWiki en la Wikipedia en inglés. Desde febrero de 2013, el código Lua se puede incrustar en plantillas wiki empleando la funcionalidad "{{#invoke:}}" de Scribunto. Esta extensión es compatible con Lua 5.1 a partir de octubre de 2022 .

El código fuente de Lua se almacena en páginas llamadas módulos (por ejemplo, Módulo:Ejemplo ). Luego, estos módulos individuales se invocan (mediante código {{#invoke:<Module name>|<Function name>|(optional) param1 | param2...}}). Ejemplo:

Ejecutando un módulo

Los módulos se ejecutan en páginas wiki normales utilizando la función de analizador #invoke. La sintaxis de #invoke es similar a la sintaxis de la plantilla, pero con algunas diferencias. La diferencia más importante es que necesita especificar un nombre de función . Una función es un conjunto de instrucciones que toma valores de entrada, los procesa y devuelve un valor de salida. [1] Esto es muy parecido a lo que hace una plantilla: le das argumentos, los procesa y obtienes un resultado. Sin embargo, puedes definir muchas funciones en un módulo Lua, mientras que solo puedes definir una plantilla en una página.

Además, no puedes simplemente ejecutar un módulo Lua directamente: solo puedes ejecutar una de las funciones del módulo. El módulo es sólo un contenedor para las funciones y no hace nada por sí solo. Entonces, hay dos razones por las que necesitamos ingresar un nombre de función: no podemos ejecutar un módulo por sí solo y, sin especificar un nombre de función, Lua no sabrá qué función queremos ejecutar.

La forma más sencilla de ejecutar un módulo desde una página wiki es la siguiente:

{{#invocar: nombre del módulo | nombre de la función }}

Por ejemplo, podemos ejecutar el Módulo: Ejemplo de esta manera, que tiene una función llamada "hola".

Usando argumentos

Los argumentos se pasan a los módulos de la misma manera que se pasan a las plantillas. Sin embargo, tenga en cuenta que el texto después del primer carácter de barra vertical es siempre el nombre de la función; el primer argumento posicional es el texto después de la segunda tubería.

{{#invocar: nombre del módulo | nombre de la función | primer argumento posicional | segundo argumento posicional | argumento con nombre = valor }}

En Module:Example , la función "hello_to" saluda a diferentes personas según el primer argumento posicional. Funciona así:

Una tercera función en Módulo: Ejemplo , llamada "count_fruit", usa los argumentos nombrados bananasy applespara contar la cantidad de plátanos y manzanas que tenemos. Se puede ejecutar así:

La mayoría de los módulos tienen una página de documentación que explica qué argumentos se pueden utilizar y cuáles serán sus efectos.

Solicitar un guión

Visite Wikipedia talk:Lua para solicitar ayuda para escribir un script de Lua para realizar una tarea específica en Wikipedia u otro proyecto de la Fundación Wikimedia.

Historia

Historia sórdida. {{ qif }}, ParserFunctions, extensión Lua, lenguaje de scripting wiki en debate (JavaScript v. Lua), mw:Extension:WikiScripts, Tim escribe Scribunto con soporte inicial para Lua.

Debatido durante años, Lua se instaló en 2012 para realizar pruebas en test2.wikipedia.org, con una invitación abierta a todos los editores para experimentar con el desarrollo de módulos de Lua. Lua se instaló en la Wikipedia en inglés en febrero de 2013, después de realizar pruebas en mediawiki.org y los wikis de prueba de Wikimedia.

Acerca de lua

Vea también la breve presentación de Brad Jorsch para ver un ejemplo básico de cómo convertir una plantilla de wikitexto en un módulo Lua.

Lua es un lenguaje de programación que se puede utilizar para analizar datos, calcular expresiones y formatear resultados mediante funciones o programación orientada a objetos . Aunque algunos scripts de Lua pueden mantenerse simples, para una fácil comprensión, Lua permite estructuras complejas que incluyen tablas, funciones dinámicas y matrices asociativas donde los subíndices de índice pueden ser palabras y números de índice. Lua también admite la recursión de funciones reanidadas, por lo que se debe tener cuidado para evitar una complejidad excesiva donde otros usuarios no entenderían cómo mantener un módulo de Lua. El siguiente es el código fuente del módulo utilizado para los ejemplos anteriores.

 p  local =  {};  --Todos los módulos de Lua en Wikipedia deben comenzar definiendo una variable  --que contendrá sus funciones accesibles externamente.  --Dichas variables pueden tener el nombre que desee y  también pueden contener varios datos y funciones. pag . hola  =  función (  marco  )  --Agrega una función a "p".  --Estas funciones se pueden llamar en Wikipedia  --mediante el comando #invoke.  --"frame" contendrá los datos que Wikipedia  --envía esta función cuando se ejecuta.  -- 'Hola' es un nombre de tu elección. Se debe hacer referencia al mismo nombre cuando se utiliza el módulo.   cadena  local =  "¡Hola mundo!"  --Declarar una variable local y establecerla igual a  --"¡Hola mundo!".   return  str  --Esto nos dice que salgamos de esta función y enviemos la información en  --"str" ​​de regreso a Wikipedia. fin  - fin de la función "hola" función  p . hello_to ( frame ) - Añade otra función local  name  =  frame . args [ 1 ]  -- Para acceder a los argumentos pasados ​​a un módulo, use `frame.args`  -- `frame.args[1]` se refiere al primer parámetro sin nombre  -- dado al módulo return  "Hola, "  ..  nombre  ..  "!"  -- `..` concatena cadenas. Esto devolverá un  saludo personalizado según el nombre dado, como "¡Hola, Fred!" función final p . contar_fruta ( marco ) local  num_bananas  =  tonumber ( frame . args . bananas )  o  0 - Argumentos con nombre ({{#invoke:Example|count_fruit|foo=bar}}) local  num_apples  =  tonumber ( frame . args . apples )  o  0 - son igualmente se accede indexando `frame.args` por nombre (`frame.args["bananas"]`, -- o equivalentemente `frame.args.bananas`.local  conj_bananas  =  num_bananas  ==  1  and  'banana'  or  'bananas'  local  conj_apples  =  num_apples  ==  1  and  'apple'  or  'apples'  - Los operadores ternarios asignan valores basados ​​en una condición de forma compacta. -- Aquí, `conj_bananas` obtiene ``banana'' si `num_bananas` es 1, en caso contrario ``bananas'`. -- De manera similar, `conj_apples` obtiene ``apple'` si `num_apples` es 1; en caso contrario, ``apples'`.  return  'I have '  num_bananas  ..  '  '  ..  conj_bananas  ..  ' and '  ..  num_apples  ..  ''  ..  conj_apples  -- Como arriba, concatena un montón de cadenas para producir  -- una oración basada en argumentos dados. finreturn  p:  todos los módulos finalizan devolviendo la variable que contiene sus funciones a Wikipedia. -- Ahora podemos usar este módulo llamando a {{#invoke: Ejemplo | hola }}, -- {{#invoke: Ejemplo | hola_to | foo }}, o {{#invoke:Example|count_fruit|bananas=5|apples=6}} - Tenga en cuenta que la primera parte de la invocación es el nombre de la página wiki del módulo, - y la segunda parte es el nombre de una de las funciones adjuntas a la variable que devolvió.-- La función "imprimir" no está permitida en Wikipedia. Todo el resultado se logra mediante cadenas "devueltas" a Wikipedia.

Una muestra de Lua está resaltada por la etiqueta "<syntaxhighlight lang="lua">...</syntaxhighlight>" colocada alrededor del código fuente de Lua. Para ver algunos ejemplos más complejos de Lua, consulte el artículo: " Lua (lenguaje de programación) ".

Para obtener instrucciones sobre cómo utilizar Lua en MediaWiki (y por lo tanto en Wikipedia), consulte el manual de referencia de mw:Extension:Scribunto/Lua.

Examen de la unidad

Algunos marcos de pruebas unitarias están disponibles para scripts Lua en Wikipedia. Estos permiten a un editor ejecutar el módulo con un conjunto determinado de entradas y verificar que se produzcan las salidas esperadas. Son útiles para detectar rápidamente regresiones de software , donde las modificaciones a un script introducen problemas nuevos (o identifican viejos).

Por convención, las pruebas unitarias para un módulo como Module:Example se colocan en Module:Example/testcases y se ejecutan en Module talk:Example/testcases .

Module:ScribuntoUnit y Module:UnitTests son marcos de prueba ampliamente utilizados. Categoría:Módulos para herramientas de prueba tiene algunos otros para revisar que pueden ser interesantes.

Funciones específicas de MediaWiki

En general: Lua solo puede obtener entradas como cadenas de texto pasadas {{#invoke:}}y qué se puede recuperar a través de mw.title.new(...):getContent() y frame:expandTemplate(). La salida de Lua no se preprocesará a menos que se llame explícitamente a frame:preprocess(), lo que significa que las llamadas a plantillas, funciones de analizador, etc. en la salida no funcionarán correctamente. Además, todo Lua en la página está limitado a 10 segundos de tiempo de CPU (puede consultar el código fuente de una página renderizada para ver cuánto tiempo tardó en analizarse una plantilla o módulo). Y en relación con el Lua estándar, el Lua de Scribunto carece de todo tipo de funciones (consulte el manual de referencia de mw:Extension:Scribunto/Lua § Diferencias con el Lua estándar).

Limitaciones de entrada de Lua

El código Lua en Scribunto solo se ejecuta cuando se analiza la página. Por lo tanto, la única entrada del usuario que Lua puede recibir es mediante la edición de la página : no puede crear un cuadro que calcule la raíz cuadrada de un número que ingresa, ni recalcular una parte del conjunto de Mandelbrot dependiendo de en qué parte del conjunto principal haga clic. en. La entrada que Lua puede recibir incluye cualquier página de texto transcluible en Wikipedia. Esto no incluye archivos gráficos (ni siquiera archivos .SVG , aunque en realidad son texto, a menos que los corte y pegue en una página de texto Wiki), la lista de páginas enumeradas en una categoría , ni el contenido de páginas especiales no transclibles. .

Wikitexto

Los encabezados transcluidos de Wikipedia frecuentemente contienen un código oculto como "UNIQ5ae8f2aa414ff233-h-3--QINU" que puede ser necesario eliminar para que se puedan analizar de manera efectiva.

Los enlaces Wiki que utilizan el truco de la canalización [[Wikipedia:Help| ]] no funcionarán si se devuelven como salida; deben escribirse explícitamente como [[Wikipedia:Help|Help]]. Otras transformaciones previas al guardado, como la sustitución ~~~~con firmas, tampoco podrán procesarse. Las transclusiones de plantillas, las llamadas a funciones del analizador y las sustituciones de variables (es decir, cualquier cosa con {{...}}) no se procesarán, ni tampoco se procesarán etiquetas como <ref>o <nowiki>. Utilice frame:extensionTag para agregar etiquetas como <ref>o <syntaxhighlight>a la salida.

Etiquetado de plantillas convertidas

Coloque la plantilla {{ lua }} en la subpágina de documentación de todas las plantillas que utilizan Lua. Ayudará a comunicar mejor el uso de Lua y las conversiones de plantillas.

Ver también

Notas

  1. ^ También puede tener múltiples valores de salida, pero normalmente no se puede acceder a las funciones que hacen esto desde páginas wiki.