Menu
CoddyTech

Añadir métodos a las formas

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 44 de 80.

Por tu capítulo sobre POO en Lua, sabes que las tablas pueden contener funciones, igual que cualquier otro valor. Las formas también pueden describir esos campos de función: convirtiendo una forma en un pequeño contrato de datos y comportamiento.

Un campo de método usa la sintaxis de tipo de función que aprendiste en el capítulo sobre funciones. Su primer parámetro se llama convencionalmente self, la tabla a la que pertenece el método, y la forma incluso puede referenciarse a sí misma:

type Greeter = {
    name: string,
    greet: (self: Greeter) -> string,
}

Para implementar la forma, almacena una función en el campo y dale ese parámetro self:

local greeter: Greeter = {
    name = "Ana",
    greet = function(self: Greeter): string
        return `Hello, I'm {self.name}`
    end,
}

Llamarlo significa pasar tú mismo la tabla como self: greeter.greet(greeter). A través de self, el método lee los campos de la tabla sobre la que se llamó.

Escribir la tabla dos veces resulta incómodo, y ya conoces la solución de Lua: los dos puntos. La siguiente lección conecta la sintaxis : con estas formas tipadas.

challenge icon

Desafío

Fácil

Dale a una forma rectangular un método que calcule su área.

  1. Escribe type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}.
  2. Crea local rect: Rectangle con width 4, height 6 y area = function(self: Rectangle): number que devuelva self.width * self.height.
  3. Muestra rect.area(rect), después rect.width.

Presiona Ejecutar código: la salida muestra 24 y 4.

Pruébalo tú mismo

-- 1) tipo Rectangle con width, height y un método area
-- 2) rect local: Rectangle (width 4, height 6) con area implementado
-- 3) imprime el área y luego el ancho

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online