function a(object, params)
params.x = params.x + 0.5
end
function b(object, params)
params.x = params.x + 100
end
function c(object, params)
params.x = params.x * 2
end
function add_hook(object, name, fn, priority)
local h = {name = name, fn = fn, priority = priority}
object.hooks = object.hooks or {}
local n = #object.hooks + 1
for i, v in ipairs(object.hooks) do
if v.priority <= priority then n = i break end
end
table.insert(object.hooks, n, h);
end
function run_hooks(object, name, params)
for i, v in ipairs(object.hooks) do
if (v.name == name) then
v.fn(object, params)
if params.quit then break end
end
end
end
obj = {}
add_hook(obj, "qwe", a, 100)
add_hook(obj, "qwe", b, 1000)
add_hook(obj, "qweqwe", c, 300)
params = {x = 2}
run_hooks(obj, "qwe", params)
print("Result: params.x = " .. tostring(params.x))