2011-06-05 34 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

相關問題