Modul:CallAssert
Tampilan
Modul ini dinilai siap digunakan secara umum. Modul ini sudah matang dan diperkirakan bebas dari bug dan siap digunakan pada tempat yang tepat di manapun. Modul ini siap disinggung di halaman-halaman bantuan dan sumber informasi Wikipedia lainnya sebagai pilihan untuk dipelajari para pengguna baru. Untuk mengurangi beban server dan output yang tidak diharapkan, modul ini harus diperlengkapi dengan halaman bak pasir dan kasus uji daripada harus melakukan suntingan coba-dan-salah berulang-ulang. |
Modul ini menyediakan fungsi callAssert, yang menyederhanakan pemeriksaan kesalahan dengan menampilkan kesalahan jika fungsi yang diberikan mengembalikan nil atau salah. Modul ini mirip dengan fungsi baku assert, tetapi keduanya berbeda, callAssert sendiri memanggil fungsi tersebut, yang nilai kembaliannya akan diperiksa. Memungkinkannya untuk memasukkan nama fungsi dan nilai argumen dalam pesan kesalahan.
Penggunaan
local callAssert = require('Module:CallAssert') local result1, result2, etc = '''callAssert(''func'', {{'}}''funcName''{{'}}, ...)'''
callAssert
memangil func(...)
dan memeriksa apakah nilai yang dikembalikan pertama bernilai true. Jika ya, maka akan mengembalikan semua nilai yang dikembalikan. Jika tidak, modul ini akan menampilkan pesan kesalahan '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