Я ищу способ уточнить контракты моих функций Lua. В частности, какие атрибуты там должны иметь параметры.Параметры самодокументирования в Lua
Чтобы проиллюстрировать мою проблему, некоторые фрагменты кода с типичной структурой моего текущего кода. Функция, которая создает новый «экземпляр» с двумя публичными функциями.
local function newTextPrinter(color)
return {
print = function(textToPrint)
PrintText(textToPrint, 20, color, 5, 'center');
end,
printBig = function(textToPrint)
PrintText(textToPrint, 30, color, 5, 'center');
end
}
end
Функция, которая принимает параметр, который должен иметь одну и ту же подпись (или надмножество).
local function printSomeStuff(textPrinter)
textPrinter.print("some")
textPrinter.printBig("stuff")
end
Призывание поздней функции
local textPrinter = newTextPrinter("ffffffff")
printSomeStuff(textPrinter)
Проблема с этим кодом, что вы не можете сказать, что параметр textPrinter
предоставляется printSomeStuff
должен выглядеть, не смотря на реализацию printSomeStuff
. Хотя в этом примере достаточно просто сделать это, это часто бывает не так (и в моем сценарии происходит переключение между файлами). Также нет намека на то, что подходящее значение может быть получено через newTextPrinter
, кроме сходства по имени.
Есть ли способ сделать код более самостоятельным документированием и показать, что авторы намерены лучше?
Я предпочитаю подход, который является легким и не пытается эмулировать классовое наследование. Аналогичным образом, код предпочтительнее, чем документация, и, в противном случае, документация в формате, понятном инструментам, предпочтительнее свободной формы. Ясно, что я могу просто написать комментарий вроде: «параметр textPrinter
нуждается в print
и printBig
публичных функциях», однако это очень подвержено ошибкам, если ничего не говорит о ошибках, которые вы делаете в документации, или когда вы реорганизуете код и забываете его обновить.
Я использую Lua 5.0 и довольно новичок в этом языке.
Возможный дубликат [Таблица с методами, как обрабатывать/проверить их?] (Http://stackoverflow.com/questions/35670456/table-with-methods-how-to-handle-inspect -them) – warspyking
Возможный дубликат http://stackoverflow.com/questions/35670456/table-with-methods-how-to-handle-inspect-them/ – warspyking
Просто любопытно, почему все еще Lua 5.0? – lhf