Мне не нравятся типы кодирования в именах переменных. Я предпочитаю давать переменным достаточно явные имена, чтобы их намерение было ясным.
Если мне нужно больше, я использую функцию проверки типов при необходимости:
function foo(array, callback, times)
checkType( array, 'table',
callback, 'function',
times, 'number' )
-- regular body of the function foo here
end
Функция checkType
может быть реализована так:
function checkType(...)
local args = {...}
local var, kind
for i=1, #args, 2 do
var = args[i]
kind = args[i+1]
assert(type(var) == kind, "Expected " .. tostring(var) .. " to be of type " .. tostring(kind))
end
end
Это имеет то преимущество, что правильно выдает ошибку при выполнении. Если у вас есть тесты, ваши собственные тесты выполнят LINT и не выполнятся, если тип неожиданный.