Wikipedia: Lua


De Wikipedia, la enciclopedia libre
  (Redirigido desde Wikipedia: MODULE )
Saltar a navegación Saltar a búsqueda

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. El código Lua ahora se puede incrustar en plantillas wiki empleando la funcionalidad "{{#invoke:}}" de Scribunto. Esta extensión es compatible con Lua 5.1 a partir de julio de 2015 .

El código fuente de Lua se almacena en páginas llamadas módulos (por ejemplo, Módulo: Ejemplo ). A continuación, 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 #invoke parser. La sintaxis de #invoke es similar a la sintaxis de la plantilla, pero con algunas diferencias. La diferencia más importante es que debe 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, puede definir muchas funciones en un módulo Lua, mientras que solo puede definir una plantilla en una página.

Además, no puede simplemente ejecutar un módulo Lua directamente, solo puede ejecutar una de las funciones del módulo. El módulo es solo un contenedor para las funciones y no hace nada por sí mismo. 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:

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

Por ejemplo, podemos ejecutar Module: Example de esta manera, que tiene una función llamada "hola".

  • {{#invoke:Example|hello}} → ¡Hola mundo!

Usando argumentos

Los argumentos se pasan a los módulos de la misma forma 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.

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

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

  • {{#invoke:Example|hello_to|Kate}} → ¡Hola, Kate!
  • {{#invoke:Example|hello_to|Fred}} → ¡Hola, Fred!

Una tercera función en Module: Example , named has "count_fruit" usa los argumentos named bananasy applespara contar el número de plátanos y manzanas que tenemos. Se puede ejecutar así:

  • {{#invoke:Example|count_fruit|apples=3|bananas=4}} → Tengo 4 plátanos y 3 manzanas
  • {{#invoke:Example|count_fruit|bananas=5|apples=2}} → Tengo 5 plátanos y 2 manzanas

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

Solicita un guion

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

Historia

Sórdida historia . {{ qif }}, ParserFunctions , extensión Lua , debate sobre el lenguaje de script wiki (JavaScript v. Lua), mw: Extensión: WikiScripts , Tim escribe Scribunto con soporte inicial para Lua.

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

Sobre Lua

Consulte 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 secuencias de comandos que se puede utilizar para analizar datos, calcular expresiones y formatear resultados utilizando funciones o programación orientada a objetos . Aunque algunos scripts de Lua se pueden mantener 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 recursividad de funciones re-anidadas, por lo que se debe tener cuidado para evitar una complejidad excesiva donde otros usuarios no entenderían cómo mantener un módulo Lua. El siguiente es el código fuente del módulo utilizado para los ejemplos anteriores.

local  p  =  {};  Todos los módulos de lua en Wikipedia deben comenzar por definir una variable  , que contendrá sus funciones accesibles desde el exterior.  Estas variables pueden tener el nombre que desee y también pueden  contener varios datos y funciones. p . hola  =  función (  marco  ):  agrega una función a "p".  --Estas funciones se pueden llamar en Wikipedia, a  través del comando #invoke.  - "marco" contendrá los datos que Wikipedia -  envía esta función cuando se ejecuta.  - 'Hola' es un nombre de su elección. Se debe hacer referencia al mismo nombre cuando se utiliza el módulo. local  str  =  "¡Hola mundo!"  - Declare una variable local y configúrela igual a  - "¡Hola mundo!".  return  str -  Esto nos dice que salgamos de esta función y enviemos la información en  - "str" ​​a Wikipedia. fin  - fin de la función "hola" función  p . hello_to ( frame ) - Agrega 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 retorno  del módulo " Hola, "  ..  nombre  ..  "!"  - `..` concatena cadenas. Esto devolverá un  saludo personalizado según el nombre dado, como "¡Hola, Fred!" función final p . count_fruit ( marco ) local  num_bananas  =  marco . argumentos . bananas  - Los argumentos con nombre ({{#invoke: Example | count_fruit | foo = bar}}) son igualmente locales  num_apples  =  frame . argumentos . manzanas  - se accede indexando `frame.args` por nombre (` frame.args ["bananas"] `, o)  - equivalentemente` frame.args.bananas`. return  'Tengo'  ..  num_bananas  ..  'bananas y'  ..  num_apples  ..  'manzanas'  - Como arriba, concatenar un montón de cadenas para producir - una oración basada en los argumentos dados. finreturn  p: todos los  módulos terminan devolviendo la variable que contiene sus funciones a Wikipedia. - Ahora podemos usar este módulo llamando a {{#invoke: Example | hola}}, - {{#invoke: Ejemplo | hello_to | foo}}, o {{#invoke: Ejemplo | count_fruit | bananas = 5 | manzanas = 6}} - Tenga en cuenta que la primera parte de la invocación es el nombre de la página de wik 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. Toda la salida se realiza mediante cadenas "devueltas" a Wikipedia.

Una muestra de Lua se resalta con 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 usar Lua dentro de MediaWiki (y por lo tanto Wikipedia), consulte mw: Extension: Scribunto / Lua reference manual .

Examen de la unidad

Hay algunos marcos de prueba unitarios disponibles para los scripts de Lua en Wikipedia. Estos permiten que un editor ejecute el módulo con un conjunto dado de entradas y verifique que se produzcan las salidas esperadas. Son útiles para detectar rápidamente regresiones de software , donde las modificaciones a un script introducen nuevos (o identifican viejos) problemas.

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 .

Módulo: ScribuntoUnit y Módulo: UnitTests son los marcos de prueba más utilizados. Categoría: Módulos para herramientas de prueba tiene algunos otros para revisar que pueden ser interesantes.

Funciones específicas de Wikipedia

En general: Lua solo puede obtener entradas como cadenas de texto pasadas a {{#invoke:}}y lo que se puede recuperar a través de mw.title.new (...): getContent () y frame: expandTemplate (). La salida de Lua no será preprocesada a menos que se llame explícitamente a frame: preprocess (), lo que significa que las llamadas de plantilla, 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 buscar en 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 (ver mw: Extensión: manual de referencia de Scribunto / Lua § Diferencias del Lua estándar ).

Limitaciones de entrada de Lua

El código Lua en Scribunto solo se ejecuta cuando se está analizando la página. Por lo tanto, la única entrada de usuario que puede recibir Lua 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 ingrese, o recalcular una parte del conjunto de Mandelbrot dependiendo de en qué parte del conjunto principal haga clic. sobre. La entrada que puede recibir Lua incluye cualquier página de texto transcluible en Wikipedia. Esto no incluye archivos de 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 transferibles . .

Wikitexto

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

Los Wikilinks que usan el truco Pipe [[Wikipedia:Help| ]] no funcionarán si se devuelven como salida; deben escribirse explícitamente como [[Wikipedia:Help|Help]]. Otras transformaciones de guardado previo, como la sustitución ~~~~por firmas, tampoco se procesarán. Las transclusiones de plantillas, las llamadas a funciones del analizador y las sustituciones de variables (es decir, cualquier cosa con a {{...}}) no se procesarán, ni tampoco las etiquetas como <ref>o <nowiki>.

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

  • Especial: PrefixIndex / Módulo: - el seguimiento de los módulos Lua se puede hacer usando Especial: PrefixIndex
  • Ayuda: depuración de Lua : una guía práctica sobre la depuración de módulos de Lua
  • Módulo: Sandbox proporciona un pseudo-espacio de nombres para experimentar con módulos Lua
  • WP: Solicitudes de Lua : solicitudes de plantillas o tareas basadas en Lua
  • Categoría: Plantillas basadas en Lua - grupos de plantillas basadas en Lua
  • Categoría: metamódulos Lua
  • Manual: convenciones de codificación / Lua : estándares para mejorar la legibilidad del código a través de la coherencia
  • mw: Extensión: manual de referencia de Scribunto / Lua y todos los módulos .
  • Wikipedia: codificación avanzada de plantillas

Notas

  1. ^ También puede tener varios valores de salida, pero las funciones que hacen esto normalmente no están diseñadas para ser accedidas desde páginas wiki.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Wikipedia:Lua&oldid=980088336 "