Hello again, all! Here's a handy little function to make setting multiple values on an object less token intensive. quickset() is flexible and will properly identify strings, numbers, booleans and (basic 1-dimensional) tables.
It's only 74 tokens long (once you remove the assert(), which is useful for debugging!)
function quickset(obj, keys, vals)
local v, k = split(vals), split(keys)
-- remove/comment out the assert below before publication
assert(#v == #k, "quickset() error: key/val count mismatch ("..#k.." keys, "..#v.." values)")
for i=1,#k do
local p,o = v[i]
if p=="false" then
o=false
elseif p=="true" then
o=true
elseif tostr(p)[1] == "{" then
o = split(sub(p, 2, -2),"|")
else
o = p
end
obj[k[i]]=o
end
end
|
Usage
Instead of doing this:
-- this is 32 tokens worth of code
obj = {}
obj.x = 20
obj.y = 45
obj.first_name = "Steve"
obj.hp = 10
obj.gribbls = true
obj.table_stuff = {12,33,48,181,443}
|
do this:
-- this is only 8 tokens worth of code
obj = {}
quickset(obj, "x,y,first_name,hp,gribbls,table_stuff", "20,45,Steve,10,true,{12|33|48|181|443}")
|
This works particularly well in initialization routines, where you may need to be setting 15-20 different things at a time.
I use something kinda like this for my entity system.
(28 tokens, the global "e" is an alias for the current entry in the entity array) function _set(s) local tbl=split(s) for i=2,#tbl,2 do e[tbl[i]]=tbl[i+1] end end Usage example (2 tokens): _set"e,dx,0,dy,-2,hp,0" |
[Please log in to post a comment]




