Module:TableBuilder
TableBuilder est un module qui applique aux fonctions de la librairie Table une interface fluide. Le code est ainsi Ă la fois plus concis et plus clair.
Attention : ce module ne devrait ĂȘtre utilisĂ© que pour des tables sĂ©quences, ou au pire des tables dont les Ă©lĂ©ments sont connus et limitĂ©s. En effet, ajouter Ă la table un Ă©lĂ©ment ayant pour index le nom d'une de ces fonctions remplace la fonction par cet Ă©lĂ©ment.
Utilisation
Vous devez premiĂšrement charger le module :
local TableBuilder = require('Module:TableBuilder')
DeuxiĂšmement, vous devez instancier le tableau, avec new pour une nouvelle table, avec set pour une table existante, ou en clonant une table existante.
local tab1 = TableBuilder.new()
TableBuilder.set(tab2)
local tab1 = TableBuilder.clone(tab3)
Ensuite, vous pouvez utiliser les méthodes énumérées dans la librairie Table (insert, remove, sort, maxn) ou une des fonctions spécifiques décrites ci-dessous.
Enfin, vous devez concaténer la table en utilisant la méthode concat() :
tab.concat()
Fonctions spécifiques
minsert( ... )â permet des inserts multiples, pour ajouter en une opĂ©ration plusieurs Ă©lĂ©ments Ă la fin de la table. Les paramĂštres passĂ©s Ă la fonction valant false ou nil sont ignorĂ©s.tinsert( table2, i, j )â ajoute Ă la fin de la table les Ă©lĂ©mentstable2[i]Ătable2[j]. La valeur par dĂ©faut deiest 1, et la valeur par dĂ©faut dejest la longueur de la table. Siiest plus grand quejaucun Ă©lĂ©ment n'est ajoutĂ©.
clone
TableBuilder.clone duplique une table existante, de façon récursive.
Contrairement à mw.clone, cette fonction ne clone pas la meta-table, mais utilise la meta-table de TableBuilder. Ceci permet notamment de modifier une table chargée par mw.loadData.
Cette fonction ne devrait pas ĂȘtre utilisĂ©e sur la totalitĂ© de la table chargĂ©e par loadData (utiliser require sera plus Ă©conome en mĂ©moire) mais sur une petite sous-table.
Exemples
local TableBuilder = require( 'Module:TableBuilder' )
local date = { 'Cet exemple a été modifié le' }
TableBuilder.set( date )
date.insert( "4" )
.insert( "2013" )
.insert( 3, "septembre" )
local time = TableBuilder.new()
local heure, minute = "12", "8"
local seconde
time.minsert( "Ă ", heure, "heures et", minute, "minutes", seconde, seconde and "secondes" )
date.tinsert( time )
local s = date.concat( ' ' ) .. "."
--s = 'Cet exemple a été modifié le 4 septembre 2013 à 12 h et 8 minutes.'
La documentation de ce module est générée par le modÚle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là .
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
--Module appliquant aux fonctions de la librairie Table une inteface fluide.
local meta = {
insert = function ( t, ... )
table.insert( t, ... )
return t
end,
remove = function ( t, ... )
table.remove( t, ... )
return t
end,
sort = function ( t, ... )
table.sort( t, ... )
return t
end,
maxn = function ( t )
return table.maxn( t )
end,
concat = function ( t, ... )
return table.concat( t, ... )
end,
minsert = function( t, ... )
for i = 1, select( '#', ... ) do
local sel = select( i, ... )
if sel then
t[#t+1] = sel
end
end
return t
end,
tinsert = function( t, tab, first, last )
if type( tab ) == 'table' then
for i = ( tonumber( first ) or 1 ), ( tonumber( last ) or #tab ) do
t[#t+1] = tab[i]
end
end
return t
end,
}
meta.__index = function ( t, key )
local metafunc = meta[key]
if type( metafunc ) == 'function' then
return function ( ... ) return metafunc( t, ... ) end
end
end
-- fin des fonctions de la meta-table
local TableBuilder = {
new = function( ... )
local t = { ... }
setmetatable( t, meta )
return t
end,
set = function( t )
if type( t ) == 'table' then
setmetatable( t, meta )
end
return t
end,
clone = function ( t )
local tableRefs = { }
local function recursiveClone( val )
if type( val ) == 'table' then
-- Encode circular references correctly
if tableRefs[val] ~= nil then
return tableRefs[val]
end
local retVal = { }
tableRefs[val] = setmetatable( retVal, meta )
for key, elt in pairs( val ) do
retVal[key] = recursiveClone( elt )
end
return retVal
else
return val
end
end
return recursiveClone( t )
end,
}
return TableBuilder