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.
Desafío
FácilDale a una forma rectangular un método que calcule su área.
- Escribe
type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}. - Crea
local rect: Rectanglecon width4, height6yarea = function(self: Rectangle): numberque devuelvaself.width * self.height. - Muestra
rect.area(rect), despuésrect.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
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 Luau4Trabajar con funciones
Tipado de parámetros y valores de retornoTipado de funciones anónimasFunciones que no devuelven nadaParámetros opcionalesValores predeterminados de parámetrosValores predeterminados para booleanosFunciones variádicasDefinir tipos de funcionesRepaso: funciones tipadas7Proyecto: Gestor de tareas tipado
Proyecto: La estructura de una tareaFunción para añadir una tarea2Tipos fundamentales
Número, cadena y booleanoEl tipo 'any': una salida de emergenciaEl tipo 'unknown'Tipos nulos y opcionalesLa inferencia de tipos en acciónAnotaciones de tipo explícitasRepaso: práctica de tipos fundamentales5Alias, 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 mapas
Arrays tipadosAgregar y leer elementos¿Qué es un tipo mapa?Declarar y acceder a mapasRecorrer tablasTablas de formas mixtasLeer una cuadrículaConstruir una cuadrículatable.unpackRepaso: arrays y mapas6Definició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 Luau online