跳转到内容

模組:CallAssert

本页使用了标题或全文手工转换
被永久保护的模块
维基百科,自由的百科全书

这是Module:CallAssert当前版本,由Xiplus-abot留言 | 贡献编辑于2024年1月8日 (一) 20:58 (已更改“Module:CallAssert”的保护设置:​高風險模板:115539引用<!-- 機器人3 -->([编辑=仅允许管理员](无限期)[移动=仅允许管理员](无限期)))。这个网址是本页该版本的固定链接。

(差异) ←上一修订 | 最后版本 (差异) | 下一修订→ (差异)

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