Lua loadfile函数加载与参数传递完整示例

Lua loadfile函数的完整使用教程,包含函数定义、加载执行、参数传递、自定义环境、错误处理和多次执行的详细示例

2026-07-04
Lualoadfile函数加载参数传递模块化编程插件系统

示例文件结构

我创建了两个示例文件来演示 loadfile 的使用:

1. 函数定义文件:test_functions.lua

-- 包含多个带参数的函数

-- 函数1:计算两个数的和

function add(a, b)

return a + b

end

-- 函数2:计算两个数的差

function subtract(a, b)

return a - b

end

-- 函数3:计算两个数的乘积

function multiply(a, b)

return a * b

end

-- 函数4:计算两个数的商

function divide(a, b)

if b == 0 then

return nil, "除数不能为零"

end

return a / b

end

-- 函数5:格式化字符串

function format_message(name, age, score)

return string.format("姓名:%s,年龄:%d,分数:%d", name, age, score)

end

-- 返回一个包含所有函数的表

return {

add = add,

subtract = subtract,

multiply = multiply,

divide = divide,

format_message = format_message

}

2. 演示文件:loadfile_demo.lua

展示如何使用 loadfile 加载函数文件并执行其中的函数,传递参数。

详细示例说明

示例1:直接加载并执行文件,获取返回的函数表


-- 加载函数文件
local func_loader = loadfile("test_functions.lua")
if func_loader then
    -- 执行加载的文件,获取返回的函数表
    local functions = func_loader()

    -- 执行 add 函数,传递两个参数
    local result = functions.add(10, 5)
    print("add(10, 5) = " .. result)

    -- 执行其他函数,传递不同参数
    result = functions.subtract(10, 5)
    print("subtract(10, 5) = " .. result)

    result = functions.multiply(10, 5)
    print("multiply(10, 5) = " .. result)

    local ok, err = functions.divide(10, 5)
    if ok then
        print("divide(10, 5) = " .. ok)
    else
        print("divide(10, 5) 错误: " .. err)
    end

    local msg = functions.format_message("张三", 25, 95)
    print("format_message('张三', 25, 95) = " .. msg)
end

示例2:使用自定义环境加载文件


-- 创建自定义环境
local custom_env = {
    print = print,
    string = string
}
setmetatable(custom_env, {__index = _G})

-- 加载文件并使用自定义环境
local func_loader2 = loadfile("test_functions.lua", "t", custom_env)
if func_loader2 then
    -- 执行加载的文件,将函数定义到 custom_env 中
    func_loader2()

    -- 从 custom_env 中获取函数并执行
    local result = custom_env.add(20, 8)
    print("custom_env.add(20, 8) = " .. result)
end

示例3:错误处理


local func_loader, err = loadfile("non_existent_file.lua")
if not func_loader then
    print("加载文件错误: " .. err)
    return
end

local status, result = pcall(func_loader)
if not status then
    print("执行文件错误: " .. result)
    return
end

-- 执行返回的函数
if type(result) == "table" and result.add then
    local add_result = result.add(5, 3)
    print("add(5, 3) = " .. add_result)
end

示例4:多次执行加载的函数


local func_loader3 = loadfile("test_functions.lua")
if func_loader3 then
    local functions = func_loader3()

    -- 多次调用同一个函数,传递不同参数
    for i = 1, 3 do
        local result = functions.add(i, i * 2)
        print("add(" .. i .. ", " .. i*2 .. ") = " .. result)
    end

    -- 调用不同函数,传递不同参数
    local results = {
        functions.add(100, 200),
        functions.subtract(500, 150),
        functions.multiply(12, 15),
        functions.divide(100, 4)
    }

    print("批量执行结果:")
    for i, v in ipairs(results) do
        print("结果" .. i .. ": " .. v)
    end
end

关键知识点

  1. loadfile 的基本用法
  1. 参数传递
  1. 错误处理
  1. 环境控制
  1. 多次执行

实际应用场景

  1. 模块化编程:将功能封装到不同的 Lua 文件中,按需加载
  2. 配置管理:从文件加载配置,支持运行时修改
  3. 插件系统:动态加载插件模块,执行插件函数
  4. 热更新:在不重启程序的情况下更新功能代码
  5. 脚本执行:执行用户自定义脚本,传递运行时参数

这些示例涵盖了 loadfile 执行函数并传递参数的主要用法,你可以根据实际需求进行调整和扩展。