Skip to content

Instantly share code, notes, and snippets.

@SwadicalRag
Last active March 2, 2017 13:18
Show Gist options
  • Save SwadicalRag/2ff9f46b1d9a182ebab2b23a84edb075 to your computer and use it in GitHub Desktop.
Save SwadicalRag/2ff9f46b1d9a182ebab2b23a84edb075 to your computer and use it in GitHub Desktop.
simple vararg lib
local unpack = unpack or table.unpack
local select = select
local varg_internal_meta = {}
local varg = setmetatable({},varg_internal_meta)
varg.meta = {}
varg.meta.__index = varg.meta
function varg.meta:Unpack(from,to)
return unpack(self.value,from or 1,to or self.len)
end
function varg.meta:Copy()
return varg.create(self:Unpack())
end
function varg.meta:__tostring()
return string.format(
"Vararg [%d args]",
self.len
)
end
function varg.meta:__len()
return self.len
end
function varg.meta:__concat(varg2)
return varg.join(self,varg2)
end
function varg.meta:__add(varg2)
return varg.join(self,varg2)
end
function varg.join(varg1,varg2)
local varg3 = varg1:Copy()
varg3.len = varg1.len + varg2.len
for i=1,varg2.len do
varg3.value[varg1.len + i] = varg2.value[i]
end
return varg3
end
function varg.create(...)
return setmetatable({
value = {...},
len = select("#",...),
},varg.meta)
end
function varg_internal_meta:__call(...)
return varg.create(...)
end
return varg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment