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 mejor forma en Lua OOP: los dos puntos. rect:area() es exactamente la misma llamada; Lua pasa la tabla antes de los dos puntos como el primer argumento, self, automáticamente.
Los dos puntos también ayudan en el lugar de definición. function account:deposit(amount) declara un primer parámetro oculto llamado self por ti:
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
endNota cómo la forma declara self explícitamente — deposit: (self: Account, amount: number) -> () —, aunque los dos puntos lo ocultan en la implementación. Los dos puntos son azúcar sintáctico; el parámetro sigue estando ahí, y el tipo lo especifica 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éntico a account.deposit(account, 250). El mismo comportamiento en tiempo de ejecución que en tu capítulo de OOP: Luau solo añade tipos encima.
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 owner "Maya" y balance 1500, después adjunta ambos métodos usando la sintaxis de definición con dos puntos (function account:deposit(amount: number) …). deposit añade amount al balance; getBalance devuelve el balance actual.
Usando llamadas con dos puntos:
- imprime el balance
- deposita
250 - imprime el balance de nuevo
- imprime el owner
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 balance, deposita 250, imprime balance de nuevo, imprime 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 tablas