Skip to content

Instantly share code, notes, and snippets.

@natanael-b
Last active November 12, 2022 14:10
Show Gist options
  • Save natanael-b/fa9055011d1b2dcaabf977b82feb90bd to your computer and use it in GitHub Desktop.
Save natanael-b/fa9055011d1b2dcaabf977b82feb90bd to your computer and use it in GitHub Desktop.
class "StringBuilder" {
constructor = function (self,largura,altura)
self.elements = {separator = ""}
end;
__shl = function (self,value)
local elements = rawget(self,"elements")
elements[#elements+1] = tostring(value)
return #elements
end;
__index = function (self,value)
return self.elements[value]
end;
__newindex = function (self,key,value)
local elements = rawget(self,"elements")
if elements[key] then
elements[key] = tostring(value)
return
end
if key == "separator" then
elements.separator = tostring(value)
end
error("Attempt to direct index new items to 'StringBuilder'")
end;
__len = function (self,value)
local elements = rawget(self,"elements")
return #elements
end;
__tostring = function (self)
local elements = rawget(self,"elements")
local result = ""
for i,value in ipairs(elements) do
result = result == "" and value or result..elements.separator..value
end
return result
end;
clear = function (self,value)
local elements = rawget(self,"elements")
local separator = elements.separator
rawset(self,"elements",{})
local elements = rawget(self,"elements")
elements.separator = separator
end;
__idiv = function (self,idx)
local elements = rawget(self,"elements")
table.remove(elements,idx)
end;
remove = function (self,idx)
local elements = rawget(self,"elements")
table.remove(elements,idx)
end;
__ipairs = function (self)
local elements = rawget(self,"elements")
return ipairs(elements)
end;
__pairs = function (self)
local elements = rawget(self,"elements")
return ipairs(elements)
end
}
t = StringBuilder:new()
t.separator = "\n"
t << 123
t << 456
t << 789
print(t)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment