# 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

Ces librairies ne sont pas incluses par défaut, mais peuvent être chargées si besoin en utilisant require.

#### bit32

Ceci est une émulation de la librairie bit32 de Lua 5.2. On peut la charger avec :
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 2$^{32}$-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 2$^0$) et 31 est celui de poids fort (celui valant 2$^{31}$).

#### bit32.band

bit32.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

bit32.bnot( x )
Retourne le complément binaire de x.

#### bit32.bor

bit32.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

bit32.btest( ... )
Équivalent à bit32.band( ... ) ~= 0

#### bit32.bxor

bit32.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

bit32.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

bit32.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

bit32.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 2$^{disp}$.
Notez qu'un déplacement au-delà de 31 donne 0.

#### bit32.rshift

bit32.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 2$^{disp}$.
Notez qu'un déplacement au-delà de 31 donne 0.

#### bit32.arshift

bit32.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

bit32.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

bit32.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

Cette librairie contient des méthodes utiles pour implémenter des librairies Scribunto. Elle peut être chargée avec :

#### libraryUtil.checkType

libraryUtil.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

libraryUtil.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

libraryUtil.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

libraryUtil.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

libraryUtil.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 :

## luabit

Les librairies "bit" et "hex" de luabit peuvent être chargées avec :
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

L'interface Lua native pour la librairie Ustring peut être chargée comme suit :
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.
| Librairie Site | Débogage |