-
-
Save Codinablack/dad3b59195367ff67f4523793aa64b20 to your computer and use it in GitHub Desktop.
automated getter/setter generation example for lua "classes"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local defaults = { | |
name = "", | |
words = "", | |
mana = 0, | |
manaPercent = 0, | |
soul = 0, | |
spellId = 0, | |
range = -1, | |
level = 0, | |
magLevel = 0, | |
cooldown = 1000, | |
groupCooldown = 1000, | |
secondaryGroupCooldown = 0, | |
group = SPELLGROUP_NONE, | |
secondaryGroup = SPELLGROUP_NONE, | |
spellType = SPELL_UNDEFINED, | |
premium = false, | |
enabled = true, | |
learnable = false, | |
pzLock = false, | |
aggressive = true, | |
blockingCreature = false, | |
blockingSolid = false, | |
needWeapon = true, | |
selfTarget = false, | |
needTarget = false, | |
vocations = {} | |
} | |
-- necessary for automated getter/setter | |
-- do not move, else it will also generate for methods starting with "__" | |
local keys = {} | |
for key, _ in pairs (defaults) do | |
table.insert(keys, key) | |
end | |
LuaSpell = setmetatable(defaults, | |
{ | |
__call = function(luaSpell, ...) | |
return luaSpell.new(...) | |
end | |
} | |
) | |
LuaSpell.__index = LuaSpell | |
LuaSpell.__call = function(self) | |
return LuaSpell.new(self) | |
end | |
function LuaSpell.new(name, words) | |
local self = setmetatable({ }, LuaSpell) | |
if name then | |
self.name = name | |
end | |
if words then | |
self.words = words | |
end | |
return self | |
end | |
-- getter/setter generator | |
local function generate(key) | |
local k = key | |
k = k:gsub("^%l", string.upper) | |
local getter = "function LuaSpell:get" .. k .. "() return self." .. key .. " end" | |
print(getter) | |
loadstring(getter)() | |
local setter = "function LuaSpell:set" .. k .. "(value) self." .. key .. " = value end" | |
print(setter) | |
loadstring(setter)() | |
end | |
-- auto generate getter/setter | |
for i = 1, #keys do | |
generate(keys[i]) | |
end | |
obj_1 = LuaSpell("obj 1") | |
obj_2 = LuaSpell("obj 2") | |
obj_3 = LuaSpell() | |
obj_1:setName("obj 1 modified") | |
print(obj_1:getName(), obj_2:getName(), obj_3:getName()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment