模块:ExampleMath
此模块的文档可以在模块:ExampleMath/doc创建
-- 模块名称:Module:ExampleMath
-- 描述:提供各种数学计算功能的Lua模块
-- 作者:示例模块
-- 版本:1.0
local p = {} -- p代表要导出的函数表
-- 内部辅助函数(外部不可直接调用)
local function validateNumber(num, paramName)
if type(num) ~= 'number' then
error(string.format("参数'%s'必须是数字,当前类型是: %s", paramName, type(num)), 2)
end
return num
end
-- 计算两个数的和
function p.add(frame)
local args = frame.args
local a = tonumber(args[1]) or 0
local b = tonumber(args[2]) or 0
return a + b
end
-- 计算两个数的乘积
function p.multiply(frame)
local args = frame.args
local a = tonumber(args.a) or tonumber(args[1]) or 1
local b = tonumber(args.b) or tonumber(args[2]) or 1
return a * b
end
-- 计算平均值
function p.average(frame)
local args = frame.args
local sum = 0
local count = 0
for key, value in pairs(args) do
local num = tonumber(value)
if num then
sum = sum + num
count = count + 1
end
end
if count == 0 then
return "错误:未提供有效数字"
end
return sum / count
end
-- 计算阶乘
function p.factorial(frame)
local args = frame.args
local n = math.floor(tonumber(args[1]) or 0)
if n < 0 then
return "错误:阶乘不能为负数"
elseif n == 0 then
return 1
end
local result = 1
for i = 1, n do
result = result * i
end
return result
end
-- 生成数学表格
function p.mathTable(frame)
local args = frame.args
local start = tonumber(args.start) or 1
local stop = tonumber(args.stop) or 10
local result = '{| class="wikitable"\n'
result = result .. '|+ 数学表 (' .. start .. ' 到 ' .. stop .. ')\n'
result = result .. '|-\n'
result = result .. '! 数字 !! 平方 !! 立方 !! 平方根\n'
for i = start, stop do
result = result .. '|-\n'
result = result .. '| ' .. i ..
' || ' .. (i * i) ..
' || ' .. (i * i * i) ..
' || ' .. string.format("%.2f", math.sqrt(i)) .. '\n'
end
result = result .. '|}'
return result
end
-- 带有命名参数的计算器
function p.calculator(frame)
local args = frame:getParent().args -- 获取父页面的参数
local operation = args.operation or "add"
local num1 = tonumber(args.num1) or 0
local num2 = tonumber(args.num2) or 0
local format = args.format or "text"
local result
if operation == "add" then
result = num1 + num2
elseif operation == "subtract" then
result = num1 - num2
elseif operation == "multiply" then
result = num1 * num2
elseif operation == "divide" then
if num2 == 0 then
return "错误:除数不能为零"
end
result = num1 / num2
else
return "错误:未知的操作类型"
end
if format == "html" then
return '<div style="border: 1px solid #ccc; padding: 10px; margin: 10px;">' ..
'<strong>计算结果:</strong>' .. result .. '</div>'
elseif format == "wikitext" then
return "'''计算结果:'''" .. result
else
return "结果: " .. result
end
end
return p -- 必须返回模块函数表