如何在 LUA 中重定向所有类调用?
2022-2-28 11:57:13
收藏:0
阅读:866
评论:2
好的,我在这方面有些困难,所以我会先给出一个简单的例子来说明:
假设我有一个“类”,让我们命名为 MyClass
,假设它有一个名为 MyFunction
的函数,我们可以通过从任何 MyClass
对象调用该函数来访问它,比如 MyClassObject:MyFunction()
。
如果我没有访问那个函数的权限,并且想要添加一个在执行之前执行的新行为,我可以做类似于这样的事情:
MyClass.OriginalMyFunction = MyClass.MyFunction -- 存储旧函数
function MyClass:MyFunction(args)
--执行之前做一些事情
MyClass:OriginalMyFunction(args) --使用相同的参数调用原始函数
end
这只是一个简单的示例,但我需要做的是对类中的所有可能函数都做同样的处理。也就是说,在调用 MyClassObject
上的任何函数之前都要执行一些代码。
这是可能的吗?如果是,请告诉我该如何做?
原文链接 https://stackoverflow.com/questions/71294677
点赞
stackoverflow用户7504558
下面是一个继承的例子,其中可以将一些代码添加到你的所有函数中:
function new (parent)
local child = {}
for k,v in pairs(parent) do
if type(v)=="function" then
child[k] = function(...)
print("inherit:")
return v(...)
end
else child[k] = v
end
end
return child
end
my_class = new(class)
class.bar("arg1","arg2")
my_class.bar("arg1","arg2")
print(class.a)
print(my_class.a)
结果:
bar arg1 arg2
inherit:
bar arg1 arg2
value
value
2022-02-28 14:01:47
评论区的留言会收到邮件通知哦~
推荐文章
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
- 如何创建一个 lua 脚本以针对特定键为 fluentbit 进行限流
- 如何在Lua中将变量从Lua推送到C ++
可以通过元表来实现,
以下是比较简单的例子:
local MyClass = {} function MyClass:new() local newObj = { x = 0 } self.__index = self return setmetatable(newObj, self) end function MyClass:get_x() print("hello from get_x") return self.x end local HookedMyClass = {} function HookedMyClass:new() local t = MyClass:new() local mt = { __index = function(table, key) print("hook") return(MyClass[key]) end } return setmetatable(t, mt) end local hooked = HookedMyClass:new() print(hooked:get_x())