Initiation au Lua avec Scribunto/Quelques compléments
Ce chapitre est réservé à tout ce qui n'a pas pu être mis dans les chapitres précédents.
Librairies chargeables
modifierCes librairies ne sont pas incluses par défaut, mais peuvent être chargées si besoin en utilisant require()
.
bit32
modifierCeci est une émulation de la librairie bit32
de Lua 5.2. On peut la charger avec :
bit32 = require( 'bit32' )
La librairie bit32 fournit des opérations binaires sur des entiers non signés 32bits. Les nombres en entrée sont tronqués en entiers (d'une façon non spécifiée) et ramenés entre 0 et 232-1 par une opération de modulo. Les valeurs retournées sont également dans cet intervalle de valeurs.
Quand les bits sont numérotés (comme dans bit32.extract()), 0 est le bit de poids faible (celui correspondant à la valeur 20) et 31 est celui de poids fort (celui valant 231).
bit32.band
modifierbit32.band( ... )
Retourne le ET binaire de ses paramètres : le résultat a un bit donné à 1 si et seulement si le même bit de chaque paramètre est à 1.
Appelée sans paramètre, cette fonction retourne tous les bits à 1.
bit32.bnot
modifierbit32.bnot( x )
Retourne le complément binaire de x
.
bit32.bor
modifierbit32.bor( ... )
Retourne le OU binaire de tous ses paramètres : le résultat a un bit donné à 1 si au moins un des paramètres a le même bit à 1.
Appelée sans paramètre, cette fonction retourne tous les bits à 0.
bit32.btest
modifierbit32.btest( ... )
Équivalent à bit32.band( ... ) ~= 0
bit32.bxor
modifierbit32.bxor( ... )
Retourne le OU EXCLUSIF binaire de ses paramètres : le résultat a un bit donné à 1 si le nombre de paramètres ayant ce même bit à 1 est impair.
Appelée sans paramètre, cette fonction retourne tous les bits à 0.
bit32.extract
modifierbit32.extract( n, field, width )
Extrait width
bits de n
, en commençant au bit field
. Accéder à des bits en dehors de l'intervalle 0 à 31 est une erreur.
Si width
est non précisé, sa valeur par défaut est 1.
bit32.replace
modifierbit32.replace( n, v, field, width )
Remplace width
bits de n
, en commençant au bit field
, avec les width
premiers bits de v
. Accéder à des bits en dehors de l'intervalle 0 à 31 est une erreur.
Si width
est non précisé, sa valeur par défaut est 1.
bit32.lshift
modifierbit32.lshift( n, disp )
Retourne le nombre n
décalé de disp
bits vers la gauche. Ceci est un décalage logique : les bits insérés valent 0. Ceci est en général équivalent à multiplier par 2disp
.
Notez qu'un déplacement au-delà de 31 donne 0.
bit32.rshift
modifierbit32.rshift( n, disp )
Retourne le nombre n
décalé de disp
bits vers la droite. Ceci est un décalage logique : les bits insérés valent 0. Ceci est en général équivalent à diviser par 2disp
.
Notez qu'un déplacement au-delà de 31 donne 0.
bit32.arshift
modifierbit32.arshift( n, disp )
Retourne le nombre n
décalé de disp
bits vers la droite. Ceci est un décalage arithmétique : si disp
est positif, les bits insérés seront les mêmes que le bit 31 du nombre initial.
Notez qu'un déplacement au-delà de 31 donne 0 ou 4294967295.
bit32.lrotate
modifierbit32.lrotate( n, disp )
Retourne le nombre n
décalé circulairement de disp
bits vers la gauche.
Notez que les rotations sont équivalentes modulo 32 : une rotation de 32 est identique à une rotation de 0, une rotation de 33 à une rotation de 1…
bit32.rrotate
modifierbit32.rrotate( n, disp )
Retourne le nombre n
décalé circulairement de disp
bits vers la droite.
Notez que les rotations sont équivalentes modulo 32 : une rotation de 32 est identique à une rotation de 0, une rotation de 33 à une rotation de 1…
libraryUtil
modifierCette librairie contient des méthodes utiles pour implémenter des librairies Scribunto. Elle peut être chargée avec :
libraryUtil = require( 'libraryUtil' )
libraryUtil.checkType
modifierlibraryUtil.checkType( name, argIdx, arg, expectType, nilOk )
Génère une erreur si type( arg )
ne correspond pas à expectType
. De plus, aucune erreur n'est générée si arg
est nil et si nilOk
est vrai.
name
est le nom de la fonction qui appelle cette fonction, et argIdx
est la position du paramètre dans la liste des paramètres. Ils sont utilisés pour générer le message d'erreur.
libraryUtil.checkTypeMulti
modifierlibraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes )
Lève une erreur si type( arg )
ne reconnait aucune des chaînes dans le tableau expectTypes
.
Cela sert pour les arguments qui ont plus d'un type valide.
libraryUtil.checkTypeForIndex
modifierlibraryUtil.checkTypeForIndex( index, value, expectType )
Génère une erreur si type( value )
ne correspond pas à expectType
.
Ceci sert à implémenter une méta-méthode __newindex
.
libraryUtil.checkTypeForNamedArg
modifierlibraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk )
Génère une erreur si type( arg )
ne correspond pas à expectType
. De plus, aucune erreur n'est générée si arg
vaut nil et que nilOk
vaut true.
Cette fonction est un équivalent de la fonction libraryUtil.checkType()
pour les méthodes appelées en utilisant la syntaxe des paramètres nommés (func{ name = value }
).
libraryUtil.makeCheckSelfFunction
modifierlibraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc )
Ceci sert à implémenter des "méthodes" sur des tables destinées à être appelées avec la syntaxe obj:method()
. Il retourne une fonction qui peut être appelée « en haut » de ces méthodes avec le paramètre self
et le nom de la méthode, et génère une erreur si l’objet self
n’est pas selfObj
.
Cette fonction est en général utilisé dans les constructeurs de fonctions de librairies :
function myLibrary.new() local obj = {} local checkSelf = libraryUtil.makeCheckSelfFunction( 'myLibrary', 'obj', obj, 'myLibrary object' ) function obj:method() checkSelf( self, 'method' ) end function obj:method2() checkSelf( self, 'method2' ) end return obj end
luabit
modifierLes librairies "bit" et "hex" de luabit peuvent être chargées avec :
bit = require( 'luabit.bit' ) hex = require( 'luabit.hex' )
Notez que la librairie bit32 contient les mêmes opérations que "luabit.bit", et que les opérations dans "luabit.hex" peuvent être réalisées en utilisant string.format()
et tonumber()
.
Le module "noki" n’est pas disponible car il n'est d'aucune utilité en Scribunto. Le module "utf8" n'est également pas disponible car redondant avec la librairie Ustring.
ustring
modifierL'interface Lua native pour la librairie Ustring peut être chargée comme suit :
ustring = require( 'ustring' )
Dans tous les cas, la librairie Ustring (mw.ustring
) devrait être utilisée à la place, car elle remplace de nombres fonctions plus lentes par des appels au code PHP.