Lua中的插件框架API

ale*_*xrs 6 plugins lua

我正在为一个应用程序实现一个带Lua脚本的插件系统.基本上,它将允许用户通过在Lua中定义一个或多个函数来扩展功能.将调用插件函数以响应应用程序事件.

在Lua中是否有一些可以作为模型的良好开源插件框架?

特别是我想知道将参数传递给插件并接收返回值的最佳方法是什么,这种方式既灵活又易于插件编写者使用.

只是为了澄清,我从Lua脚本编程的角度来看,我对API的设计很感兴趣,而不是从托管应用程序的角度来看.

任何其他与Lua插件系统设计相关的建议或最佳实践将不胜感激.

Nor*_*sey 4

Lua 的一流函数使这种事情变得如此简单,我想你不会发现太多框架的方式。请记住,Lua 的口号是提供最小的机制,让个体程序员为自己制定策略。

你的问题很笼统,但我为你的 API 推荐如下:

  • 单个插件应该由单个 Lua 表表示(就像 Lua 模块由单个表表示一样)。

  • 表的字段应包含表的操作或回调。

  • 共享状态应该存储在表中;它应该存储在创建表的代码的局部变量中,例如,

    local initialized = false
    
    return {
       init = function(self, t) ... ; initialized = true end,
       something_else = function (self, t) 
                          if not initialized then error(...) end
                          ... 
                        end,
       ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 您还会看到我建议所有插件操作使用相同的接口:

    1. 插件的第一个参数是表本身
    2. 唯一的其他参数是包含操作所需的所有其他信息的表。
    3. 最后,每个操作都应该返回一个结果表。

    传递和返回单个表而不是位置结果的原因是,它将帮助您随着接口的发展保持代码兼容。

总之,积极使用表和一流函数,并保护插件的私有状态