【问题标题】:Lua: Unable to load a module that loads another moduleLua:无法加载加载另一个模块的模块
【发布时间】:2017-11-12 13:15:26
【问题描述】:

我无法在 Lua 中加载需要另一个模块的模块。我已经尝试阅读官方文档,但我仍然不清楚。使用 package.pathrequire 的组合加载单个模块可以正常工作。但是对 require 的嵌套调用失败并产生错误:函数中的 C 级别过多(限制为 200)

我有一个项目结构如下:

./exeDir: 包含 tBig.lua

./utils:包含 pkgBig.lua 和 pkgSmall.lua

pkgSmall.lua

-- this module is loaded later in pkgBig.lua
local function toto(s)
    print('Toto says: ' .. s)
end

local function dummy()
    print('Dummy')
end

pkgSmall = 
{
    toto = toto,
    dummy = dummy,  
}

return pkgSmall

pkgBig.lua

local myPkg = require 'pkgSmall'

local function titi(s)
    print('Titi says (followed by dummy): ' .. s)
    myPkg.dummy()
end

local function fifi()
    print('Calling toto from fifi...')
    myPkg.toto('FiFi called me')
end

pkgBig = 
{
    titi = titi,
    fifi = fifi,
}

return pkgBig

主脚本:

tBig.lua

package.path = package.path .. ';' .. 'pathToUtils/pkgBig.lua'
local big = require 'pkgBig'

big.titi(' called from main')
big.fifi(' pkgSmall test')

调用此脚本会产生“太多 C 级别...”错误。

【问题讨论】:

    标签: lua


    【解决方案1】:

    我无法重现您的错误。

    但请注意,pathToUtils 需要包含模块名称的模式。

    这对我来说很好用:

    pathToUtils = 'utils/?.lua'
    

    【讨论】:

    • 确实:package.path 显然不适用于直接文件名。当我将其更改为模式时,错误消失了。
    • 我已经编辑了问题以强调错误的来源
    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2011-08-19
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多