instanceof e introspección de tipos
Implemente comprobaciones instanceof() recorriendo la jerarquía de clases.
instanceof e introspección de tipos es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué es instanceof?
instanceof(obj, Class) comprueba si un objeto es una instancia de una clase específica o de cualquiera de sus antecesoras. Sustituye a type() sin formato de Lua en los sistemas de POO.
instanceof sencillo
Recorra la cadena de metatablas desde la instancia hacia arriba y busque la clase objetivo.
local function instanceof(obj, cls)
if type(obj) ~= "table" then return false end
local mt = getmetatable(obj)
while mt do
if mt == cls then return true end
local parent = getmetatable(mt)
mt = parent and parent.__index
end
return false
endPrueba de instanceof
Funciona correctamente en cadenas de herencia.
local cat = Animal:new("Cat","Meow")
local rex = Dog:new("Rex")
print(instanceof(rex, Dog)) -- true
print(instanceof(rex, Animal)) -- true
print(instanceof(cat, Dog)) -- falseConvención del campo __type
Almacene un nombre de tipo en forma de cadena en cada clase para realizar comprobaciones rápidas del tipo en tiempo de ejecución.
Animal.__type = "Animal"
Dog.__type = "Dog"
local function typeOf(obj)
local mt = getmetatable(obj)
return mt and mt.__type or type(obj)
end
print(typeOf(rex)) -- DogGuardas de tipos
Cree funciones de guarda de tipos para realizar aserciones de forma más clara en los límites de la API.
local function assertType(obj, cls, argName)
if not instanceof(obj, cls) then
error(("Expected %s for %s, got %s"):format(
cls.__name, argName, typeOf(obj)), 2)
end
endgetmetatable para detectar clases
getmetatable(obj) devuelve la tabla de la clase. Compárela con una clase conocida para comprobar el tipo exacto (sin tener en cuenta la herencia).
local function exactType(obj)
return getmetatable(obj)
end
print(exactType(rex) == Dog) -- true
print(exactType(rex) == Animal) -- false (not exact)Introspección de la jerarquía de clases
Recorra la cadena de metatablas para enumerar todas las clases de las que hereda un objeto.
local function classChain(obj)
local chain = {}
local mt = getmetatable(obj)
while mt do
chain[#chain+1] = mt.__name or "?"
local parent = getmetatable(mt)
mt = parent and parent.__index
end
return chain
endComparación de sistemas de tipos
La función integrada type() de Lua solo devuelve 8 tipos básicos. En los sistemas de POO, utilice instanceof o funciones typeOf personalizadas que comprendan la jerarquía de clases.
Clases selladas
Impidа la creación de subclases eliminando el método :extend() de una clase o añadiendo una comprobación en __index.
Despacho basado en tipos
Despache las llamadas a funciones según el tipo en tiempo de ejecución: es una alternativa ligera a la sobrecarga de métodos.
local function process(animal)
if instanceof(animal, Dog) then
print("Processing Dog:", animal.name)
elseif instanceof(animal, Animal) then
print("Processing Animal:", animal.name)
end
endDepuración con información de tipos
Añada __tostring a las clases e incluya el nombre del tipo para obtener información de depuración significativa.
Pregunta sobre instanceof
¿Qué devuelve instanceof(rex, Animal) si Rex es un Dog (que hereda de Animal)?
Repaso: instanceof e introspección de tipos
instanceof recorre la cadena de metatablas para comprobar los tipos teniendo en cuenta la herencia. Utilice campos __type para consultar rápidamente el tipo en forma de cadena. Las guardas de tipos en los límites de la API detectan pronto los errores de tipo y muestran mensajes claros.
Aprende Lua con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 40
- Lecciones
- 159
Preguntas frecuentes
¿La lección «instanceof e introspección de tipos» es gratis?
Sí — el texto completo de «instanceof e introspección de tipos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «instanceof e introspección de tipos»?
Implemente comprobaciones instanceof() recorriendo la jerarquía de clases. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «instanceof e introspección de tipos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Diseño de clases base y constructores
- Herencia multinivel
- Composición de mixins y comprobaciones de interfaces
- instanceof e introspección de tipos