im not good with metatables, so is there any way to get a reference to the main table within the metatable?
basically I want to store methods for the main table inside the metatable.
I want to do this because if I set the methods directly with function table:method, iterating over it returns the function and I don’t want that.
the function that creates the table:
function createVault(player: Player): Vault
if not next(saveStructure) then warn(errorPrefix.." Save structure has not been set! Use DataVault:SetSaveStructure() to create one.") return nil end
if table.find(vaults, player) then return 1 end
vaults[player] = saveStructure
local vault = vaults[player]
pcall(function()
vault = hs:JSONDecode(dss:GetDataStore("Data"):GetAsync("Player_"..player.UserId))
end)
setmetatable(vault, {
--where the methods are to be stored
})
end
notes for this code:
this code is for a datastore module project im working on Vault is a custom type annotation vaults is a dictionary where index is a player object and value is the vault
if the player has a vault already, return 1 as a function detects if it is 1 and handles it saveStructure is a table
function createVault(player: Player): Vault
if not next(saveStructure) then
warn(errorPrefix.." Save structure has not been set! Use DataVault:SetSaveStructure() to create one.")
return nil
end
if table.find(vaults, player) then
return 1
end
vaults[player] = saveStructure
local vault = vaults[player]
pcall(function()
vault = hs:JSONDecode(dss:GetDataStore("Data"):GetAsync("Player_"..player.UserId))
end)
local metatable = {
-- Sample method
sampleMethod = function(self)
print("This is a method for ", self)
end,
-- Add more methods here
-- The __index metamethod
__index = function(tbl, key)
-- If key is not found in main table, look it up in metatable
return metatable[key]
end
}
setmetatable(vault, metatable)
return vault
end
Here’s how you can use the sampleMethod :
local vaultInstance = createVault(somePlayer)
vaultInstance:sampleMethod() -- prints "This is a method for {contents of vaultInstance}"