Menu
Coddy logo textTech

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
end

Nota cómo la forma declara self explícitamentedeposit: (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.

challenge icon

Desafío

Fácil

Crea un alias de tipo llamado Account con:

  • owner de tipo string
  • balance de tipo number
  • deposit(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:

  1. imprime el balance
  2. deposita 250
  3. imprime el balance de nuevo
  4. 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
quiz iconPonte a prueba

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