Как я могу сделать систему конфигурации для моих расширений Lua? - PullRequest
2 голосов
/ 06 июня 2011

Я добавил поддержку сценариев lua для своего программного обеспечения C, чтобы упростить расширение и добавление новых функций.

Например, я ищу файлы .lua внутри папки. Эти плагины содержат функции для идентификации моего программного обеспечения, такие как:

function GetName()
    return "Youtube Search"
end

Также есть "Рабочие функции", например:

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

Таким образом, мое программное обеспечение теперь может искать на YouTube благодаря этому плагину.

Но теперь у меня есть проблема, я не могу найти подходящее решение для нее. Для некоторых плагинов требуется система конфигурации, например, в этом плагине Youtube требуется свойство, которое возвращает только видео WebM. Но плагину liveLeak это свойство не нужно.

В моем приложении он должен быть способен анализировать то, что нужно плагину (2 целых числа и 1 строка), а затем отображать его в списке.

Как я мог элегантно реализовать решение, которое устраняет эти проблемы?

1 Ответ

2 голосов
/ 06 июня 2011

Как насчет пары функций (необязательно), предоставляемых такими плагинами, как 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

Таким образом, ваше приложение может быть написано для поддержки отображения предпочтений для нескольких известных типов (определенных вами, например, логическим). Приложение будет спрашивать каждый плагин, какие настройки он может поддерживать, и отображать параметры для них. Затем он сообщит плагину, какие параметры были выбраны, и каковы их значения.

...