There are a lot of errors on that snippet, so I'm going to recreate it following your idea, but I'm afraid you might not understand it
Table = setmetatable({
Child = function(self, chld)
assert(self.wrap, "Underlying object is nil")
local child = self.wrap:FindFirstChild(chld, true)
if child then
print(child.Name)
else
print("Child Does Not Exist")
end
end
}, {
__call = function(self, tble)
return setmetatable({wrap = game:FindFirstChild(tble)}, {__index = Table})
end}
)
Table("Workspace"):Child("Derp")
On side-note, in theory you are searching for descendants, not for childs.
I will try to keep it simple. We assign a variable Table (it's a bad practice to name variables like that) a table containing Child which is a method that searches for descendants of the object wrap field. We set to that table a metatable containing a __call metamethod wich returns a table with 'wrap' index set to the return of FindFirstChild called with the parameter and we set to that table a __index metamethod pointing to Table so that table has access to child, that way we can call it with the colon notation.
Consider looking into metatables and Object Oriented Programming in Lua if you didn't understand.
EDIT:
Fixed your idea which is more simple than mine
function Table(tble)
return {
tble = game:FindFirstChild(""..tble);
Child = function(self, chld)
if self.tble:FindFirstChild(""..chld, true) then
print(self.tble:FindFirstChild(chld, true).Name)
else
print("Child Does Not Exist")
end
end}
end
Table("Workspace"):Child("BasePlate")
There are some bad practices there, like concatenating instead of just using the parameter, but I leave it like that and just fixed it.