پودمان:CallAssert: تفاوت میان نسخه‌ها

    از ویکی‌نور
    fa>Xaosflux
    جز (Changed protection level for "Module:CallAssert": used in interface MediaWiki:Protectedinterface ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)))
    (بدون تفاوت)

    نسخهٔ ‏۱۳ مارس ۲۰۱۹، ساعت ۱۶:۲۴

    توضیحات این پودمان می‌تواند در پودمان:CallAssert/توضیحات قرار گیرد.

    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