Initiation au Lua avec Scribunto/Quelques compléments

Début de la boite de navigation du chapitre

Ce chapitre est réservé à tout ce qui n'a pas pu être mis dans les chapitres précédents.

Quelques compléments
Icône de la faculté
Chapitre no 19
Leçon : Initiation au Lua avec Scribunto
Chap. préc. :Librairie Site
Chap. suiv. :Débogage

Exercices :

Sur les compléments
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Initiation au Lua avec Scribunto : Quelques compléments
Initiation au Lua avec Scribunto/Quelques compléments
 », n'a pu être restituée correctement ci-dessus.

Librairies chargeables

modifier

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

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

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

bit32.bnot( x )

Retourne le complément binaire de x.


bit32.bor

modifier

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

bit32.btest( ... )

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


bit32.bxor

modifier

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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.