es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tabla de Objetos en Lua

Estoy intentando crear un objeto Lua como este:

Block = {x = 0, y = 0, color = “red”}

function Block:new (x, y, color)
block = {}
setmetatable(block, self)
self.__index = self
self.x = x
self.y = y
self.color = color
return block
end

Luego, colocando varias instancias de este objeto en una tabla en un archivo separado:

blocks = {}
table.insert(blocks, Block:new(0, 0, ‘red’))
table.insert(blocks, Block:new(2, 0, ‘blue’))
table.insert(blocks, Block:new(1, 1, ‘green’))

for i,v in ipairs(blocks) do
print(i,v.x, v.y, v.color)
end

Pero mi salida es:

1 1 1 verde
2 1 1 verde
3 1 1 verde

¿Cómo puedo hacer que estos objetos conserven su propia instancia en la tabla?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar la función setmetatable para establecer el __index de la tabla al objeto Block. Esto asegurará que cada instancia del objeto Block se almacene en la tabla blocks.

    Por ejemplo:

    blocks = {}
    table.insert(blocks, Block:new(0, 0, 'red'))
    table.insert(blocks, Block:new(2, 0, 'blue'))
    table.insert(blocks, Block:new(1, 1, 'green'))
    
    setmetatable(blocks, Block)
    
    for i,v in ipairs(blocks) do
        print(i,v.x, v.y, v.color)
    end
    

    Esto debería producir la salida:

    1   0   0   red
    2   2   0   blue
    3   1   1   green
    

Comments are closed.