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 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
end

Observa 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.

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 "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:

  1. imprime el saldo
  2. deposita 250
  3. imprime el saldo de nuevo
  4. 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
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

Practica por tu cuenta: Compilador de Lua online