2011-06-05 30 views
2

我为我的C软件添加了lua脚本支持,以便更轻松地扩展和添加新功能。我怎么能为我的Lua扩展做一个配置系统?

例如,我在文件夹中查找.lua文件。这些插件包含的功能,以确定我的软件,如:

function GetName() 
    return "Youtube Search" 
end 

它有太多的“工人功能”,例如:

function Search(strTerm, SearchResult) 
    --SEACH YOUTUBE 
    SearchResult = MYRESULTS  
end 

这样一来,我的软件现在可以在YouTube上感谢这个搜索插入。

但现在我有一个问题,我找不到合适的解决方案。有些插件需要一个配置系统,例如在这个Youtube插件中,它需要一个只返回WebM视频的属性。但是一个liveLeak插件不需要这个属性。

在我的应用程序中,它应该能够解析插件需要的内容(2个整数和1个字符串),然后将其显示在列表中。

我该如何优雅地实施解决方案来解决这些问题?

回答

2

如何通过插件如getSupportedConfigItems()setConfigItems(tbl)暴露一对函数(可选)?如果我正确理解你的问题(我必须承认,我不明白“2个整数和1串”的一部分),它可能看起来像这样对YouTube的插件:

function getSupportedConfigItems() 
    return { 
     showWebMOnly = { 
      type = 'boolean', 
      description = 'Show only WebM videos', 
      default = true 
     } 
    } 
end 

function setConfigItems(tbl) 
    for key, value in pairs(tbl) do 
     if key == 'showWebMOnly' then 
      -- ... 
     end 
    end 
end 

这样,你的应用程序可以写成支持显示一些众所周知类型的偏好(由你定义,例子是一个布尔值)。应用程序会询问每个插件可以支持哪些首选项,并显示这些选项。然后它会告诉插件选择了哪些选项,以及它们的值是什么。

+0

那正是我在找的! 但我不知道这些结构。你能解释一下吗? getSupportedConfigItems返回的类型是什么?如何指定多个?我怎么能把它绑定到c? – bratao 2011-06-06 03:58:34

+0

它只是返回一个表。因此,您可以决定您想要的变量,并在此处添加它们的类型,说明和默认值。这一切都是真正的自由形式,没有固定的格式。 – jpjacobs 2011-06-06 07:55:51

+0

我写的方式,get方法只是返回一个表。您可以轻松添加第二,第三等项目,以获得插件所具有的许多偏好(应用程序会将它们显示为每个插件零个或多个偏好的列表)。 – 2011-06-06 16:29:09

相关问题