什么是阻生智齿| 黑枸杞泡水是什么颜色| 身上长血痣是什么原因引起的| 鸡的五行属什么| 糖尿病人能喝什么饮料| 假体隆胸什么材料好| 粉色裤子配什么上衣好看| 为什么佛山有三个车牌| 草字头加西读什么| 牙齿松动吃什么药| 土命适合什么颜色| pst是什么意思| 沙中土是什么意思| 欧巴桑什么意思| 鬼一般找什么人压床| 石敢当是什么神仙| 雅号是什么意思| 世界杯什么时候开始| 言尽于此是什么意思| 蟾蜍是什么| 那悲歌总会在梦中惊醒是什么歌| 口腔医学是什么| 流产挂什么科| 飞五行属什么| ac是什么元素| 耳道炎是什么原因引起的| 结石挂什么科| doris什么意思| 米诺地尔搽剂和米诺地尔酊有什么区别| 中度贫血吃什么补血最快| 人最怕什么| 什么药消肿最快最有效| 活泼的近义词是什么| fci是什么意思| 如履薄冰是什么意思| 望梅止渴是什么意思| 高锰酸钾是什么东西| 电波是什么意思| 知行合一是什么意思| 纽带是什么意思| 陕西有什么特产| 抗美援朝是什么时候| 月经期间洗澡会有什么影响吗| 面瘫挂什么科| 小苏打是什么成分| 隐翅虫咬了用什么药膏| 什么是手性碳原子| 沙棘是什么| 身体不适是什么意思| dha中文叫什么| 尿酸高注意什么| 滑档是什么意思| 氯低是什么原因| 利润是什么| 抽血生化是查什么| 十二月二十七是什么星座| 3月25日什么星座| 吃什么护肝| 媒婆是什么意思| 什么空如洗| 心灵鸡汤是什么意思| 益生元和益生菌有什么区别| 难于上青天是什么意思| 咖啡与什么食物相克| 红豆相思是什么动物| 老当益壮是什么意思| 上镜是什么意思| 半月板变性是什么意思| 镜花缘是什么意思| 小三是什么意思| 尿酸高是什么原因造成的| 脚背痒是什么原因| 银行卡睡眠状态是什么意思| 载体是什么| 青稞是什么东西| 血滴子是什么意思| 黄瓜和青瓜有什么区别| 没主见是什么意思| 什么是内卷| 爱出者爱返福往者福来什么意思| 肌肉酸痛吃什么药| 什么时候会有孕吐反应| 莆田系是什么意思啊| 查幽门螺旋杆菌挂什么科| 孕检挂什么科| 什么是蝴蝶宝宝| 线上考试是什么意思| 吃什么能减肥| 胡萝卜不能和什么食物一起吃| 七月十六是什么日子| 办幼儿园需要什么证| 志心皈命礼是什么意思| 34岁属什么| 肚子经常疼是什么原因| 正方形的纸能折什么| 人子是什么意思| 骨皮质是什么| 检查肺部最好做什么检查最准确| 天秤座后面是什么星座| 护身符是什么意思| 混油皮是什么特征| 什么酒好喝| 血热吃什么药| 荨麻疹打什么针好得快| 半盏流年是什么意思| 乙肝两对半45阳性是什么意思| 什么立什么群| 月经来了一点就没了是什么原因| 尿带血是什么原因| 囊中羞涩什么意思| 梅开二度是什么意思| 驾校教练需要什么条件| 脸上起疙瘩是什么原因| 什么是比喻| 游戏黑洞是什么意思| hr医学上什么意思| 属鸡的是什么命| 做胃镜有什么好处| 蝙蝠属于什么类| 小孩发烧可以吃什么水果| 河童是什么| 筵是什么意思| 加百列是什么天使| 尿粒细胞酯酶阳性什么意思| 为什么会长卵巢畸胎瘤| 裂纹舌是什么原因引起的| 什么东西含铅量高| 样板间是什么意思| 小孩肠胃炎吃什么药| 洗礼是什么意思| 吃什么会变白| 金代表什么生肖| 天目湖白茶属于什么茶| 吃什么可以治拉肚子| 大姨妈推迟是什么原因| 3.19号是什么星座| 九重紫纪咏结局是什么| 痛风吃什么中药| 戴玉对身体有什么好处| 什么笔记本电脑好| 来苏水又叫什么名字| 乙肝不能吃什么东西| 毛毛虫吃什么食物| 耳朵轮廓痒是什么原因| 异想天开是什么意思| jewelry什么意思| 头眩晕是什么原因引起的| 玉的主要成分是什么| 甘草配什么泡水喝最好| 狗感冒了吃什么药| 一什么床| 下肢静脉血栓吃什么药| 吃西瓜不能吃什么| 日出扶桑是什么意思| 身上有红色的小红点是什么原因| 什么情况挂全科门诊| 越描越黑是什么意思| 出挑是什么意思| 宫颈口大是什么原因| 牙膏什么牌子最好| 固液法白酒是什么意思| 舂米是什么意思| 小腿酸胀吃什么药| 绝非偶然是什么意思| 海啸是什么| 黑色的蛇是什么蛇| 飞沙走石是什么意思| 狗与什么属相相冲| 经常眩晕是什么原因| 总胆红素高是什么原因| 想飞上天和太阳肩并肩是什么歌| 心火旺吃什么中药| 风流人物指什么生肖| 微喇裤配什么鞋子好看| sunny是什么意思| ib是什么单位| wa是什么意思| 高汤是什么汤| 什么是cos| 带牙套是什么意思| 心肌缺血吃什么药最好| 动漫ova是什么意思| 河童是什么意思| 窦性早搏是什么意思| 废品收入计入什么科目| 世界第一大运动是什么| 岭南是什么地方| 南是什么结构| smt什么意思| 眼袋青色什么原因| 司长什么级别| 黑糖和红糖有什么区别| 葡萄籽有什么功效| 行尸走肉什么意思| 强迫症什么意思| 什么油最好| 变态是什么意思| 发字五行属什么| 尿素低是什么原因| 说话声音小是什么原因| 怀孕初期可以吃什么水果| 3月20日什么星座| 血压正常头晕是什么原因| 1945年是什么年| 感冒黄鼻涕吃什么药| 注意力不集中是什么原因| 受精卵着床有什么症状| 乏力没精神容易疲劳是什么原因| 脚肿腿肿是什么原因引起的| 单身为什么中指戴戒指| 香草味是什么味道| prc是什么意思| 中国的全称是什么| 黑卡是什么卡| 属虎男和什么属相最配| 滑膜炎吃什么药能治好| 1997年出生的属什么| 2010属什么生肖| 腋下长痘痘是什么原因| afi是胎儿的什么意思| 沙示汽水有什么功效| 女性膀胱炎吃什么药| 什么眼型最好看| 金屋藏娇是什么意思| 音准是什么意思| 腺肌瘤是什么意思| 虎皮兰开花寓意什么| epa是什么营养物质| 大便带血是什么原因| 咽干是什么原因造成的| 过期茶叶有什么用途| ybb是什么意思| 茄子有什么功效| 梦见恐龙是什么预兆| 什么品牌的帽子好| 白细胞低吃什么补| 三跪九叩是什么意思| 除湿是什么意思| 喉咙有异物挂什么科| 996是什么意思| 夏季适合喝什么茶| 寒湿化热吃什么中成药| 灰指甲用什么药最好| 吃得什么填词语| 背沟深代表什么| 离岸人民币是什么意思| 清白是什么意思| 点头之交是什么意思| 钟表挂在客厅什么位置好| 长歌怀采薇是什么意思| 舌头白腻厚苔是什么原因| 细菌感染是什么原因| 梦见新房子是什么意思| 婴儿吐泡泡是什么原因| 黑色的蜜蜂是什么蜂| 便秘吃什么中药| 为什么说啄木鸟是树的医生| 小孩不吃饭是什么原因| 吃烧烤后吃什么水果可以帮助排毒| 陀螺是什么意思| 梦见着火了是什么意思| 痛风能吃什么菜| 老师的老师叫什么| 文科女生学什么专业好| 百度Ir al contenido

解放军和武警部队代表坚决拥护国家机构改革

De Wikipedia, la enciclopedia libre
百度 平底方向盘采用真皮包裹,手感细腻,多功能按键则具备日常操作时的便利性和安全性。

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


local z = {}

function z.obtenerArgumentos(frame)
	if frame.args[1] then 
		return frame.args
	end

	return frame:getParent().args
end

function z.obtenerArgumentosConValor(frame)
	if frame == mw.getCurrentFrame() then
		argumentos = frame:getParent().args
	else
		argumentos = frame.args or frame
	end

	return require('Módulo:Tablas').copiarElementosConValor(argumentos)
end

-- Obtiene los argumentos con valores de la plantilla en minúsculas y con las
-- tildes removidas, en caso de que las tenga de forma que sea más sencillo
-- trabajar con las distintas variantes en los módulos.
-- 
-- Nota: En caso de que haya parámetros duplicados tras la normalización solo
-- se mantendrá el último valor procesado por la función.
--
-- Parámetros de entrada:
--    frame: El marco utilizado por el módulo
--
-- Parámetros de salida:
--    argumentosNormalizados: los argumentos con valor y nombre normalizado
--    argumentosDuplicados: si la plantilla tiene varias veces el mismo 
--        argumento tras la normalización o no
function z.obtenerArgumentosConValorNormalizados(frame)
	local argumentos = z.obtenerArgumentosConValor(frame)
	local argumentosNormalizados = {}
	local nombreNormalizado
	local argumentosDuplicados = false
	
	for nombre, valor in pairs(argumentos) do
		
		nombreNormalizado = nombre
		
		nombreNormalizado = mw.ustring.lower( nombreNormalizado )
		nombreNormalizado = string.gsub(nombreNormalizado, "[á]", "a")
		nombreNormalizado = string.gsub(nombreNormalizado, "[é]", "e")
		nombreNormalizado = string.gsub(nombreNormalizado, "[í]", "i")
		nombreNormalizado = string.gsub(nombreNormalizado, "[ó]", "o")
		nombreNormalizado = string.gsub(nombreNormalizado, "[úü]", "u")
		
		if argumentosNormalizados[nombreNormalizado] then
			argumentosDuplicados = true
		end
		argumentosNormalizados[nombreNormalizado] = valor
	end
	
	return argumentosNormalizados, argumentosDuplicados
end

--[[
	@name	obtenerTablaDeArgumentos
	@global	args
	@param	frame
	@return	table
	@descr	Obtiene una tabla de argumentos tomando los parámetros recibidos
			tando desde la plantilla como desde la invocación de un módulo.
			En caso de duplicado tiene preferencia el valor de la invocación.
			Por ejemplo:
				con la plantilla:	{{Plantilla |campo=valor |key=clave }}
				y la invocación:	{{#invoke:Módulo |key=value }}
				se obtiene:			{ ['campo'] = 'valor', ['key'] = 'value' }
--]]
function z.obtenerTablaDeArgumentos(frame)
	-- global args
	args = {}
	local function paramMerge(orig, copy)
		local data = {}
		for key, val in pairs(orig) do
			data[key] = val
		end
		for key, val in pairs(copy) do
			data[key] = val
		end
		return data
	end
	if frame then
		-- parentArgs = frame:getParent().args or {}
		if type(frame.getParent) == 'function' then
			local parent = frame:getParent()
			if parent then
				args = paramMerge(args, parent.args)
			end
		end
		-- invokeArgs = frame.args or frame or {}
		if type(frame.args) == 'table' then
			args = paramMerge(args, frame.args)
		elseif type(frame) == 'table' then
			args = paramMerge(args, frame)
		end
	end
	return args
end

--[[
	@name	obtenerValorDeArgumentos
	@global	args
	@param	list
	@return	string or nil
	@descr	Obtiene el primer argumento válido desde una tabla de parámetros.
			Esta tabla de parámetros es una lista que contiene los nombres
			de los argumentos u otras tablas con las funciones para obtenerlos.
	Parámetros:
		con los argumentos:		{ ['campo'] = 'valor', ['key'] = 'value' }
		y usando la llamada:	obtenerValorDeArgumentos{'dato', 'campo', 'key'}
		se obtiene el valor:	'valor'
		pues 'dato' no es un argumento y 'campo' es el primero encontrado
	Funciones:
		también se puede llamar con una función de la forma
			obtenerValorDeArgumentos{'dato', { obtenerDato, '1', '2' }}
		de forma que si el argumento 'dato' no existe se llama a la función
			obtenerDato('1', '2')
--]]
function z.obtenerValorDeArgumentos(list)
	-- global args
	local lang = mw.language.getContentLanguage()
	local err, key
	if type(list) == 'number' then
		key = args[list]
	elseif type(list) == 'string' then
		key = args[list] or args[lang:ucfirst(list)]
	elseif type(list) == 'table' then
		for num, val in ipairs(list) do
			if type(val) == 'string' or type(val) == 'number' then
				key = z.obtenerValorDeArgumentos(val)
			elseif type(val) == 'function' then
				err, key = pcall(val)
				if err ~= true then
					key = nil
				end
			elseif type(val) == 'table' then
				if val[1] and type(val[1]) == 'function' then
					err, key = pcall(val[1], unpack(val, 2))
					if err ~= true then
						key = nil
					end
				end
			end
			if key ~= nil and key ~= '' then
				return key -- break
			end
		end
	end
	return key
end

return z
喝羊奶有什么好处 养神经吃什么食物最好 4月18日什么星座 谷丙转氨酶高吃什么药可以降下来 属猴和什么属相相克
百合花是什么颜色的 来日方长什么意思 为什么会胃胀气 玄孙是什么意思 细菌性结膜炎用什么药
头皮问题挂什么科 上火吃什么药 木圣念什么 泌乳素高是什么意思 公章是什么样的
肠道ct能检查什么 沙棘原浆有什么作用 髻是什么意思 错付是什么意思 肝转氨酶高有什么危害
赑屃是什么意思hcv7jop4ns8r.cn 什么是蝴蝶宝宝hcv9jop0ns8r.cn 排卵期在什么时候hcv8jop0ns3r.cn 麦冬和什么相克hcv9jop1ns2r.cn 饺子什么馅儿最好吃hcv9jop6ns4r.cn
谷丙转氨酶是什么sanhestory.com 果酱样大便见于什么病hcv9jop0ns4r.cn 酸角是什么creativexi.com 怀孕初期吃什么菜hcv8jop9ns9r.cn 黄喉是什么动物身上的hcv8jop2ns4r.cn
花生不能和什么食物一起吃xjhesheng.com 局灶是什么意思hcv9jop2ns7r.cn asc是什么意思hcv8jop1ns4r.cn coat是什么意思中文hcv9jop4ns8r.cn 钟是什么生肖hcv9jop6ns6r.cn
府尹相当于现在什么官hcv7jop5ns3r.cn 梦见两口子吵架是什么意思hcv8jop0ns7r.cn 从此萧郎是路人是什么意思hcv7jop9ns3r.cn apc是什么意思zhiyanzhang.com 桃李满天下什么意思hcv8jop6ns9r.cn
百度