Q:在lua中创建一个钩子函数

问题描述 投票:0回答:1

我想为lua做钩子功能:

为了解释,我想钩住参数并在调用函数时返回参数,如下所示:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

a = hookfunction(func1, function(...)    -- a = old function
  local args = { ... }
  print("Argument 1 =>", args[1])
  print("Argument 2 =>", args[2])
  return a(...)
end)

func1(12, 5)
Output : 

Argument 1 => 12
Argument 2 => 5
17
lua
1个回答
0
投票

您可以执行两种不同的操作。您可以为该函数创建一个包装器,或者实际上可以在Lua运行时中设置调试钩子。这是创建包装的方法:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

function wrapfunction(a)    -- a = old function
  return function(...)
    local args = { ... }
    print("Argument 1 =>", args[1])
    print("Argument 2 =>", args[2])
    return a(...)
  end
end
func1 = wrapfunction(func1)

func1(12, 5)

这是设置调试钩子的方法:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

function hookfunction(event)
  if debug.getinfo(2, 'f').func == func1 then
    print("Argument 1 =>", select(2, debug.getlocal(2, 1)))
    print("Argument 2 =>", select(2, debug.getlocal(2, 2)))
  end
end
debug.sethook(hookfunction, 'c')

func1(12, 5)
© www.soinside.com 2019 - 2024. All rights reserved.