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
[modifier | modifier le wikicode]Ces librairies ne sont pas incluses par défaut, mais peuvent être chargées si besoin en utilisant require()
.
bit32
[modifier | modifier le wikicode]Ceci 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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]bit32.bnot( x )
Retourne le complément binaire de x
.
bit32.bor
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]bit32.btest( ... )
Équivalent à bit32.band( ... ) ~= 0
bit32.bxor
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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 2disp
.
Notez qu'un déplacement au-delà de 31 donne 0.
bit32.rshift
[modifier | modifier le wikicode]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 2disp
.
Notez qu'un déplacement au-delà de 31 donne 0.
bit32.arshift
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]Cette librairie contient des méthodes utiles pour implémenter des librairies Scribunto. Elle peut être chargée avec :
libraryUtil = require( 'libraryUtil' )
libraryUtil.checkType
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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 :
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
[modifier | modifier le wikicode]Les 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
[modifier | modifier le wikicode]L'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.