El parámetro 'self' y los métodos con dos puntos
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 43 de 73.
Escribir rect.area(rect) funciona, pero aprendiste una forma mejor en Lua OOP: los dos puntos. rect:area() es exactamente la misma llamada: Lua pasa automáticamente la tabla que está antes de los dos puntos como primer argumento, self.
Los dos puntos también ayudan en el sitio de la definición. function account:deposit(amount) declara por ti un primer parámetro oculto llamado 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 es implícito
end
function account:getBalance(): number
return self.balance
endObserva cómo la estructura declara self de forma explícita, deposit: (self: Account, amount: number) -> (), aunque los dos puntos lo oculten en la implementación. Los dos puntos son una abreviatura; el parámetro sigue estando ahí, y el tipo lo expresa explícitamente. Un método que no devuelve nada se tipa con el retorno vacío -> ().
La llamada sigue la misma regla que ya conoces: account:deposit(250) es idéntica a account.deposit(account, 250). El mismo comportamiento en tiempo de ejecución que en tu capítulo de OOP: Luau simplemente añade tipos.
Desafío
FácilCrea un alias de tipo llamado Account con:
ownerde tipostringbalancede tiponumberdeposit:(self: Account, amount: number) -> ()getBalance:(self: Account) -> number
Crea una tabla account con "Maya" como propietario y un saldo de 1500; después, asocia ambos métodos usando la sintaxis de definición con dos puntos (function account:deposit(amount: number) …). deposit suma amount al saldo; getBalance devuelve el saldo actual.
Usando llamadas con dos puntos:
- imprime el saldo
- deposita
250 - imprime el saldo de nuevo
- imprime el propietario
Pruébalo tú mismo
-- Escribe código aquí
-- 1) define el tipo Account (los métodos toman self explícitamente en el tipo)
-- 2) crea la tabla account, luego adjunta deposit/getBalance con sintaxis de dos puntos
-- 3) imprime el balance, deposita 250, imprime el balance de nuevo, imprime el owner
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps6Definición de formas de tablas
Anotaciones de forma en líneaAlias de tipos para formasPropiedades opcionalesFormas frente a tablas no estructuradasExtensión de formasAñadir métodos a las formasEl parámetro 'self' y los métodos con dos puntosRecapitulación: Definición de formas de tablasPractica por tu cuenta: Compilador de Lua online