Lua的插件框架API
2011-5-30 19:49:24
收藏:0
阅读:207
评论:2
我正在为一个应用程序实现一个 Lua 脚本插件系统。基本上,它将允许用户通过定义一个或多个 Lua 函数来扩展功能。插件函数将在应用程序事件的响应中被调用。
有没有一些好的 Lua 开源插件框架可以作为模型?
特别是我想知道最好的方法是如何将参数传递给插件并接收返回的值,既灵活又易于插件编写者使用的方式。
只是为了澄清,我关心的是从 Lua 脚本编程的角度设计 API,而不是从托管应用程序的角度。
关于在 Lua 中设计插件系统的建议或最佳实践将不胜感激。
原文链接 https://stackoverflow.com/questions/6180239
点赞
stackoverflow用户501459
插件功能将在应用程序事件的响应中调用。
这表明使用观察者模式。例如,如果您的应用程序有两个事件,“foo”和“bar”,您可以编写如下内容:
HostApp.listeners = {
foo = {},
bar = {},
}
function HostApp:addListener(event, listener)
table.insert(self.listeners[event], listener)
end
function HostApp:notifyListeners(event, ...)
for _,listener in pairs(self.listeners[event]) do
listener(...)
end
end
然后当foo
事件发生时:
self:notifyListeners('foo', 'apple', 'donut')
感兴趣foo
事件的客户端(例如插件)只需注册一个监听器:
HostApp:addListener('foo', function(...)
print('foo happened!', ...)
end)
根据需要进行扩展。
特别是,我想知道传递参数给插件和接收返回值的最佳方法是什么?
插件只提供给您一个要调用的函数。您可以传递任何参数,并根据需要处理其返回值。
2011-05-31 01:18:01
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【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 的一等函数使得这种东西变得非常简单,我认为你不会在框架方面找到太多。请记住 Lua 的口号是提供最小的机制,让个人程序员自己制定策略。
虽然你的问题很普遍,但这是我为你的 API 建议的:
local initialized = false return { init = function(self, t) ... ; initialized = true end, something_else = function (self, t) if not initialized then error(...) end ... end, ... }
你还可以看到我建议所有插件操作使用相同的接口:
之所以传递和返回单个表而不是位置结果,是因为它将帮助您在接口演变时保持代码兼容。
总之,大胆使用表和一等函数,并保护插件的私有状态。