Méthodes avec Self et deux-points
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 43 sur 73.
Écrire rect.area(rect) fonctionne, mais tu as appris une meilleure manière dans la partie sur la POO en Lua : les deux-points. rect:area() est exactement le même appel : Lua transmet automatiquement la table située avant les deux-points comme premier argument, self.
Les deux-points sont également utiles lors de la définition. function account:deposit(amount) déclare pour toi un premier paramètre masqué nommé self :
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self est implicite
end
function account:getBalance(): number
return self.balance
endRemarque que la structure déclare self explicitement, deposit: (self: Account, amount: number) -> (), même si les deux-points le masquent dans l’implémentation. Les deux-points sont du sucre syntaxique ; le paramètre est toujours présent, et le type l’explicite. Une méthode qui ne renvoie rien est typée avec le retour vide -> ().
L’appel suit la même règle que tu connais déjà : account:deposit(250) est identique à account.deposit(account, 250). Le comportement à l’exécution est le même que dans ton chapitre sur la POO : Luau ajoute simplement des types par-dessus.
Défi
FacileCréez un alias de type nommé Account avec :
ownerde typestringbalancede typenumberdeposit:(self: Account, amount: number) -> ()getBalance:(self: Account) -> number
Créez une table account avec pour propriétaire "Maya" et un solde de 1500, puis attachez les deux méthodes à l’aide de la syntaxe de définition avec deux-points (function account:deposit(amount: number) …). deposit ajoute amount au solde ; getBalance renvoie le solde actuel.
En utilisant les appels avec deux-points :
- affichez le solde
- déposez
250 - affichez à nouveau le solde
- affichez le propriétaire
Essayez vous-même
-- Écrivez le code ici
-- 1) définir le type Account (les méthodes prennent self explicitement dans le type)
-- 2) créer la table account, puis attacher deposit/getBalance avec la syntaxe à deux-points
-- 3) afficher balance, deposit 250, afficher balance à nouveau, afficher owner
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps6Typage des structures de tables
Annotations de structures en ligneAlias de types pour les structuresPropriétés optionnellesStructures vs tables libresExtension de structuresAjout de méthodes aux structuresMéthodes avec Self et deux-pointsRécapitulatif : Définir des structures de tablesEntraînez-vous par vous-même : Compilateur Lua en ligne