Toggle menu
9
204
47
18.7K
KenshiDB
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
Subpages:

This metamodule provides function callAssert, which simplifies error checking by throwing an error if a given function returns nil or false. This is similar to the built-in function assert, but unlike it, callAssert itself calls the function, whose return value is to be checked. This allows it to include the function name and argument values in the error message.

Usage

local callAssert = require('Module:CallAssert')
local result1, result2, etc = callAssert(func, 'funcName', ...)

callAssert calls func(...) and checks if the first returned value evaluates to true. If it does, then it returns all the returned values. If not, it throws an error with a message in the form 'funcName(argument_values) failed'.


local function pack(...)
	return {...}, select('#', ...)
end

local function mapArray(func, array, count)
	local result = {}
	for i = 1, count or #array do
		result[i] = func(array[i])
	end
	return result
end

local function quote(value)
	if type(value) == 'string' then
		return (string.gsub(string.format('%q', value), '\\\n', '\\n'))  -- Outer parentheses remove second value returned by gsub
	end
	local str = tostring(value)
	if type(value) == 'table' and str ~= 'table' then
		return '{' .. str .. '}'
	end
	return str
end

local function callAssert(func, funcName, ...)
	local result, resultCount = pack(func(...))
	if not result[1] then
		local args, argsCount = pack(...)
		args = mapArray(quote, args, argsCount)
		local message = mw.ustring.format(
			'%s(%s) failed',
			funcName,
			table.concat(args, ', ')
		)
		error(message, 2)
	end
	return unpack(result, 1, resultCount)
end

return callAssert
Contents