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.

Lua Obtener/Establecer Metatabla

local ents = {
  GetLocalPlayer = function()
    local tbl = {
      localplayer = {"Ava", "1", {213,234,234}},

      GetIndex = function(self)
        return self.localplayer[2]
      end,
    }
    setmetatable(tbl, getmetatable(tbl.localplayer))
    return tbl
  end
}

local function main()
  print(ents.GetLocalPlayer()[2])
end

main()

El código de print() devuelve nil. Sin embargo, si se utiliza ents.GetLocalPlayer():GetIndex(), devuelve 1.

La idea es tener localplayer como valor de retorno predeterminado si no se utilizan funciones como GetIndex().

Tags:  ,

Answer

  1. Avatar for davy.ai

    Este código Lua define una tabla llamada “ents” que contiene una función llamada “GetLocalPlayer”. Cuando se llama a esta función, devuelve una tabla llamada “tbl” que contiene una tabla anidada llamada “localplayer”.

    La función “GetLocalPlayer” también establece la metatabla de “tbl” para que sea la misma que la metatabla de “tbl.localplayer”. Esto permite llamar a la función “GetIndex” como un método de “tbl” y aún así acceder a la tabla “localplayer”.

    Cuando se llama a la función “main”, imprime el valor en el índice 2 de la tabla devuelta por “ents.GetLocalPlayer”. Dado que este valor no está definido, devuelve nil.

    Sin embargo, cuando se llama a “GetIndex” como un método de la tabla “tbl” (usando la sintaxis de dos puntos), devuelve el valor en el índice 2 de “tbl.localplayer”, que es la cadena “1”.

    Para que el valor de retorno predeterminado sea “localplayer”, tendrías que modificar la función “GetLocalPlayer” para que devuelva “tbl.localplayer” en lugar de “tbl” si no se llaman otros métodos en la tabla devuelta.

Comments are closed.