hookable.lua
function Hookable(f)
local ret = {}
ret.hook = {}
setmetatable(ret, {
__add = function(a, b)
table.insert(ret.hook, b)
return ret
end,
__call = function(...)
f()
for i, v in ipairs(ret.hook) do
v()
end
end
})
return ret
end
f = function()
print("f")
end
g = function()
print("g")
end
ff = Hookable(f)
ff()
ff = ff + g
ff()