Diferencia entre revisiones de «Módulo:Argumentos/doc»

De Hispanopedia
imported>Eloy
Comienzo traducción desde en:Module:Arguments/doc
 
m Texto reemplazado: «Categoría:Wikipedia» por «Categoría:Hispanopedia»
 
(No se muestran 10 ediciones intermedias de 7 usuarios)
Línea 1: Línea 1:
{{Traducción|ci=en|art=Module:Arguments/doc}}
{{Traducción|ci=en|art=Module:Arguments/doc}}
El módulo provee acceso fácil a los argumentos pasados a <code>#invoke</code>. Es un [[:Categoría:Wikipedia:Metamódulos Lua|metamódulo]], pensado para ser usado por otros módulos, y no debería ser llamado directamente desde <code>#invoke</code>. Entre sus características se incluyen:
Este módulo provee un procesamiento fácil a los argumentos que pasan de <code>#invoke</code>. Es un [[:Categoría:Hispanopedia:Metamódulos Lua|metamódulo]], pensado para ser usado por otros módulos, y no debería ser llamado directamente desde <code>#invoke</code>. Entre sus características se incluyen:
*Eliminar espacios en blanco al principio y final de los valores (no implementado todavía)
*Eliminar espacios en blanco al principio y final de los valores (no implementado todavía)
*Eliminar parámetros vacíos (no implementado todavía)
*Eliminar parámetros vacíos (no implementado todavía)
*Los argumentos pueden ser pasados por el marco actual y el marco padre a la vez (no implementado todavía)
*Los argumentos pueden ser pasados por el marco actual y el marco padre a la vez (no implementado todavía)
*Los argumentos pueden ser pasados por otro módulo Lua o desde la consola de ''[[debuging]]''.
*Los argumentos pueden ser pasados por otro módulo Lua o desde la [[depurador|consola de depuración]].
*La mayoría de las características pueden ser personalizadas.
*La mayoría de las características pueden ser personalizadas.


==Uso básico==
==Uso básico==
Primero, es necesario cargar el módulo. Contiene una función, llamada <code>obtenerArgumentos</code>.
Para empezar, se debe cargar el módulo. Contiene una función, llamada <code>obtenerArgumentos</code>.


<source lang="lua">
<syntaxhighlight lang="lua">
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
</source>
</syntaxhighlight>


En el escenario más básico, se puede usar obtenerArgumentos dentro de la función principal (usualmente <code>main</code>).
En el escenario más básico, se puede usar obtenerArgumentos dentro de la función principal (usualmente <code>main</code>).
La varvariable <code>args</code> es una tabla que contiene los argumentos de #invoke.
La variable <code>args</code> es una tabla que contiene los argumentos de #invoke.


<source lang="lua">
<syntaxhighlight lang="lua">
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local p = {}
local p = {}
Línea 27: Línea 27:


return p
return p
</source>
</syntaxhighlight>


Sin embargo, la práctica recomendada es usar una función sólo para procesar los argumentos de #invoke. Esto significa que si se llama al módulo desde otro módulo Lua, no es necesario tener un objeto marco disponible, lo que mejora el rendimiento.
Sin embargo, se recomienda usar una función solo para procesar los argumentos de #invoke. Esto significa que si se llama al módulo desde otro módulo Lua, no es necesario tener un objeto marco disponible, mejorando el rendimiento.


<source lang="lua">
<syntaxhighlight lang="lua">
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local p = {}
local p = {}
Línea 45: Línea 45:


return p
return p
</source>
</syntaxhighlight>


Si se quiere múltiples funciones que usen los argumentos, y que también sean accesibles desde #invoke, puede usarse una función envolvente.
Si se quiere múltiples funciones que usen los argumentos, y que también sean accesibles desde #invoke, puede usarse una función envolvente.


<source lang="lua">
<syntaxhighlight lang="lua">
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local dameArgs = require('Módulo:Argumentos').obtenerArgumentos


Línea 74: Línea 74:


return p
return p
</source>
</syntaxhighlight>


=== Opciones ===
=== Opciones ===
Línea 80: Línea 80:
Las siguientes opciones están disponible, y son explicadas en las secciones de abajo.
Las siguientes opciones están disponible, y son explicadas en las secciones de abajo.


<source lang="lua">
<syntaxhighlight lang="lua">
local args = dameArgs(marco, {
local args = dameArgs(marco, {
limpiarEspacios = false,
limpiarEspacios = false,
Línea 97: Línea 97:
noSobreescribir = true
noSobreescribir = true
})
})
</source>
</syntaxhighlight>


=== Eliminar espacios y vacios ===
=== Eliminar espacios y vacios ===
Línea 107: Línea 107:
However, sometimes you want to use blank arguments as input, and sometimes you want to keep additional whitespace. This can be necessary to convert some templates exactly as they were written. If you want to do this, you can set the <code>trim</code> and <code>removeBlanks</code> arguments to <code>false</code>.
However, sometimes you want to use blank arguments as input, and sometimes you want to keep additional whitespace. This can be necessary to convert some templates exactly as they were written. If you want to do this, you can set the <code>trim</code> and <code>removeBlanks</code> arguments to <code>false</code>.
-->
-->
<source lang="lua">
<syntaxhighlight lang="lua">
local args = dameArgs(marco, {
local args = dameArgs(marco, {
limpiarEspacios = false,
limpiarEspacios = false,
removerVacios  = false
removerVacios  = false
})
})
</source>
</syntaxhighlight>


=== Personalización del formato de los argumentos ===
=== Personalización del formato de los argumentos ===
<!--
Algunas veces se desea remover algunos argumentos en blanco pero no otros, o tal vez poner todos los argumentos posicionales en minúscula. Para hacer cosas como estas, se usa la opción <code>fnValores</code>. La entrada a esta opción debe ser una función que toma dos parámetros, <code>clave</code> and <code>value</code>, y devuelve un valor sencillo. Este valor es lo que se obtiene cuando acceda al campo <code>clave</code> en la tabla de <code>args</code>  
Sometimes you want to remove some blank arguments but not others, or perhaps you might want to put all of the positional arguments in lower case. To do things like this you can use the <code>valueFunc</code> option. The input to this option must be a function that takes two parameters, <code>key</code> and <code>value</code>, and returns a single value. This value is what you will get when you access the field <code>key</code> in the <code>args</code> table.
 
-->
Ejemplo 1: esta función preserva los espacio en blanco para el primer argumento posicional, pero los elimina de los otros argumentos, y los elimina si quedan vacíos:
Ejemplo 1: esta función preserva los espacio en blanco para el primer argumento posicional, pero los elimina de los otros argumentos, y los elimina si quedan vacíos:
<source lang="lua">
<syntaxhighlight lang="lua">
local args = dameArgs(marco, {
local args = dameArgs(marco, {
fnValores      = function (clave, valor)
fnValores      = function (clave, valor)
Línea 133: Línea 132:
end
end
})
})
</source>
</syntaxhighlight>


Ejemplo 2: esta función elimina los argumentos vacíos y convierte todos los argumentos a minúsculas, pero no elimina los espacios del comienzo y final de los parámetros posicionales.
Ejemplo 2: esta función elimina los argumentos vacíos y convierte todos los argumentos a minúsculas, pero no elimina los espacios del comienzo y final de los parámetros posicionales.
<source lang="lua">
<syntaxhighlight lang="lua">
local args = dameArgs(marco, {
local args = dameArgs(marco, {
fnValores      = function (clave, valor)
fnValores      = function (clave, valor)
Línea 149: Línea 148:
end
end
})
})
</source>
</syntaxhighlight>


Nota: las funciones de arriba fallarán si se les pasa una entrada que no sea de tipo <code>string</code> or <code>nil</code>. Esto puede sucedeer si se usa la función <code>dametArgs</code> en la función principal del módulo, y esa función es llamada desde otro módulo Lua. En este caso, es necesario comprobar el tipo de la entrada. Esto no es un problema cuando se usa específicamente para obtener los argumentos de #invoke; por ejemplo, cuando se usa una función para ese caso (usualmente <code>p.main</code>) y otra ser usada por otros módulos (usualmente <code>p._main</code>).
Nota: las funciones de arriba fallarán si se les pasa una entrada que no sea de tipo <code>string</code> or <code>nil</code>. Esto puede suceder si se usa la función <code>dametArgs</code> en la función principal del módulo, y esa función es llamada desde otro módulo Lua. En este caso, es necesario comprobar el tipo de la entrada. Esto no es un problema cuando se usa una función específicamente para obtener los argumentos de #invoke; por ejemplo, cuando se usa una función para ese caso (usualmente <code>p.main</code>) y otra ser usada por otros módulos (usualmente <code>p._main</code>).


<!--
<!--
{{cot|Examples 1 and 2 with type checking}}
{{cot|Examples 1 and 2 with type checking}}
Example 1:
Example 1:
<source lang="lua">
<syntaxhighlight lang="lua">
local args = getArgs(frame, {
local args = getArgs(frame, {
valueFunc = function (key, value)
valueFunc = function (key, value)
Línea 173: Línea 172:
end
end
})
})
</source>
</syntaxhighlight>


Example 2:
Example 2:
<source lang="lua">
<syntaxhighlight lang="lua">
local args = getArgs(frame, {
local args = getArgs(frame, {
valueFunc = function (key, value)
valueFunc = function (key, value)
Línea 191: Línea 190:
end
end
})
})
</source>
</syntaxhighlight>
{{cob}}
{{cob}}
-->
-->
También, es importante destacar que la fución <code>fnValores</code> es llamada aproximadamente cada vez que se pide un argumento de la tabla <code>args</code>. Por lo tanto, si se quiere mejorar el rendimiento debería verificarse no estar haciando nada ineficiente en ese código.
También, es importante destacar que la función <code>fnValores</code> es llamada aproximadamente cada vez que se pide un argumento de la tabla <code>args</code>. Por lo tanto, si se quiere mejorar el rendimiento debería verificarse no estar haciando nada ineficiente en ese código.


=== Marcos y marcos padre ===
=== Marcos y marcos padre ===
Línea 200: Línea 199:
<!--
<!--
{{cot|Module:ExampleArgs code}}
{{cot|Module:ExampleArgs code}}
<source lang="lua">
<syntaxhighlight lang="lua">
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local p = {}
local p = {}
Línea 216: Línea 215:


return p
return p
</source>
</syntaxhighlight>
{{cob}}
{{cob}}


Línea 293: Línea 292:
-->
-->
=== Envolventes ===
=== Envolventes ===
La opción ''envolventes'' se usa para indicar un número limitado de plantillas que funcionan como envolentes; es decir, cuyo único propósito es llamar al módulo. Si el módulo detecta que es llamado desde una de estas plantillas, sólo comprobará los argumentos del marco padre; de lo contrario sólo lo hará con el marco pasado a <code>dameArgs</code>. Esto le permite al módulo ser llamado tanto desde #invoke como desde una envolvente sin la pérdida de rendimiento asociada a tener que comprobar ambos marcos (el actual y el padre) por cada argumento.
La opción ''envolventes'' se usa para indicar un número limitado de plantillas que funcionan como envolentes; es decir, cuyo único propósito es llamar al módulo. Si el módulo detecta que es llamado desde una de estas plantillas, solo comprobará los argumentos del marco padre; de lo contrario solo lo hará con el marco pasado a <code>dameArgs</code>. Esto le permite al módulo ser llamado tanto desde #invoke como desde una envolvente sin la pérdida de rendimiento asociada a tener que comprobar ambos marcos (el actual y el padre) por cada argumento.


<!--
<!--
Línea 300: Línea 299:
Wrappers can be specified either as a string, or as an array of strings.
Wrappers can be specified either as a string, or as an array of strings.


<source lang="lua">
<syntaxhighlight lang="lua">
local args = getArgs(frame, {
local args = getArgs(frame, {
wrappers = 'Template:Wrapper template'
wrappers = 'Template:Wrapper template'
})
})
</source>
</syntaxhighlight>
 


<source lang="lua">
<syntaxhighlight lang="lua">
local args = getArgs(frame, {
local args = getArgs(frame, {
wrappers = {
wrappers = {
Línea 315: Línea 313:
}
}
})
})
</source>
</syntaxhighlight>


Notes:
Notes:
Línea 327: Línea 325:
Sometimes it can be useful to write new values to the args table. This is possible with the default settings of this module. (However, bear in mind that it is usually better coding style to create a new table with your new values and copy arguments from the args table as needed.)
Sometimes it can be useful to write new values to the args table. This is possible with the default settings of this module. (However, bear in mind that it is usually better coding style to create a new table with your new values and copy arguments from the args table as needed.)


<source lang="lua">
<syntaxhighlight lang="lua">
args.foo = 'some value'
args.foo = 'some value'
</source>
</syntaxhighlight>


It is possible to alter this behaviour with the <code>readOnly</code> and <code>noOverwrite</code> options. If <code>readOnly</code> is set then it is not possible to write any values to the args table at all. If <code>noOverwrite</code> is set, then it is possible to add new values to the table, but it is not possible to add a value if it would overwrite any arguments that are passed from #invoke.
It is possible to alter this behaviour with the <code>readOnly</code> and <code>noOverwrite</code> options. If <code>readOnly</code> is set then it is not possible to write any values to the args table at all. If <code>noOverwrite</code> is set, then it is possible to add new values to the table, but it is not possible to add a value if it would overwrite any arguments that are passed from #invoke.
Línea 349: Línea 347:


<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
[[Categoría:Wikipedia:Metamódulos Lua]]
[[Categoría:Hispanopedia:Metamódulos Lua]]
}}</includeonly>
}}</includeonly>

Revisión actual - 20:27 5 abr 2024

Este módulo provee un procesamiento fácil a los argumentos que pasan de #invoke. Es un metamódulo, pensado para ser usado por otros módulos, y no debería ser llamado directamente desde #invoke. Entre sus características se incluyen:

  • Eliminar espacios en blanco al principio y final de los valores (no implementado todavía)
  • Eliminar parámetros vacíos (no implementado todavía)
  • Los argumentos pueden ser pasados por el marco actual y el marco padre a la vez (no implementado todavía)
  • Los argumentos pueden ser pasados por otro módulo Lua o desde la consola de depuración.
  • La mayoría de las características pueden ser personalizadas.

Uso básico

Para empezar, se debe cargar el módulo. Contiene una función, llamada obtenerArgumentos.

local dameArgs = require('Módulo:Argumentos').obtenerArgumentos

En el escenario más básico, se puede usar obtenerArgumentos dentro de la función principal (usualmente main). La variable args es una tabla que contiene los argumentos de #invoke.

local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local p = {}

function p.main(marco)
	local args = dameArgs(marco)
	-- El código principal del módulo vas acá
end

return p

Sin embargo, se recomienda usar una función solo para procesar los argumentos de #invoke. Esto significa que si se llama al módulo desde otro módulo Lua, no es necesario tener un objeto marco disponible, mejorando el rendimiento.

local dameArgs = require('Módulo:Argumentos').obtenerArgumentos
local p = {}

function p.main(marco)
	local args = dameArgs(marco)
	return p._main(args)
end

function p._main(args)
	-- El código principal del módulo vas acá
end

return p

Si se quiere múltiples funciones que usen los argumentos, y que también sean accesibles desde #invoke, puede usarse una función envolvente.

local dameArgs = require('Módulo:Argumentos').obtenerArgumentos

local function hazFuncInvoke(fn)
	return function (marco)
		local args = dameArgs(marco)
		return p[fn](args)
	end
end

local p = {}

p.func1 = hazFuncInvoke('_func1')

function p._func1(args)
	-- El código de la primera función va acá
end

p.func2 = hazFuncInvoke('_func2')

function p._func2(args)
	-- El código de la segunda función va acá
end

return p

Opciones

Las siguientes opciones están disponible, y son explicadas en las secciones de abajo.

local args = dameArgs(marco, {
	limpiarEspacios = false,
	removerVacios   = false,
	fnValores       = function (clave, valor)
		-- Código para procesar un argumento
            end,
	soloMarco       = true,
	soloPadre       = true,
	padrePrimero    = true,
	envolventes     = {
		'Plantilla:Una plantilla envolvente',
		'Plantilla:Otra plantilla envolvente'
            },
	soloLectura     = true,
	noSobreescribir = true
})

Eliminar espacios y vacios

local args = dameArgs(marco, {
	limpiarEspacios = false,
	removerVacios   = false
})

Personalización del formato de los argumentos

Algunas veces se desea remover algunos argumentos en blanco pero no otros, o tal vez poner todos los argumentos posicionales en minúscula. Para hacer cosas como estas, se usa la opción fnValores. La entrada a esta opción debe ser una función que toma dos parámetros, clave and value, y devuelve un valor sencillo. Este valor es lo que se obtiene cuando acceda al campo clave en la tabla de args

Ejemplo 1: esta función preserva los espacio en blanco para el primer argumento posicional, pero los elimina de los otros argumentos, y los elimina si quedan vacíos:

local args = dameArgs(marco, {
	fnValores       = function (clave, valor)
		if 1 == clave then
			return valor
		elseif valor then
			valor = mw.text.trim(valor) -- Elimina los espacios al comienzo y final del valor
			if '' ~= valor then         -- Si el valor no quedó vacío
				return valor        -- Lo devuelve
			end
		end
		return nil                          -- En otros casos, devuelve el valor nulo (es decir, no incluir el valor)
	end
})

Ejemplo 2: esta función elimina los argumentos vacíos y convierte todos los argumentos a minúsculas, pero no elimina los espacios del comienzo y final de los parámetros posicionales.

local args = dameArgs(marco, {
	fnValores       = function (clave, valor)
		if not valor then
			return nil
		end
		value = mw.ustring.lower(valor)
		if mw.ustring.find(valor, '%S') then
			return valor
		end
		return nil
	end
})

Nota: las funciones de arriba fallarán si se les pasa una entrada que no sea de tipo string or nil. Esto puede suceder si se usa la función dametArgs en la función principal del módulo, y esa función es llamada desde otro módulo Lua. En este caso, es necesario comprobar el tipo de la entrada. Esto no es un problema cuando se usa una función específicamente para obtener los argumentos de #invoke; por ejemplo, cuando se usa una función para ese caso (usualmente p.main) y otra ser usada por otros módulos (usualmente p._main).

También, es importante destacar que la función fnValores es llamada aproximadamente cada vez que se pide un argumento de la tabla args. Por lo tanto, si se quiere mejorar el rendimiento debería verificarse no estar haciando nada ineficiente en ese código.

Marcos y marcos padre

Los argumentos de la tabla args pueden ser pasados desde el marco actual o del marco padre a la vez. Para enteder qué significa esto, es más fácil dar un ejemplo. Digamos que tenemos un módulo llamado Módulo:EjemploArgs, qu eimprime los primeros dos parámetros posicionales que se le pasen:

Envolventes

La opción envolventes se usa para indicar un número limitado de plantillas que funcionan como envolentes; es decir, cuyo único propósito es llamar al módulo. Si el módulo detecta que es llamado desde una de estas plantillas, solo comprobará los argumentos del marco padre; de lo contrario solo lo hará con el marco pasado a dameArgs. Esto le permite al módulo ser llamado tanto desde #invoke como desde una envolvente sin la pérdida de rendimiento asociada a tener que comprobar ambos marcos (el actual y el padre) por cada argumento.


Escribiendo en la tabla args

Etiquetas ref

Limitaciones conocidas