Module 相互使用的模块';s局部对象

Module 相互使用的模块';s局部对象,module,lua,local,Module,Lua,Local,在vanilla Lua 5.2中,我有一个模块,包含: 两个本地函数A和B:B总是调用A,A有时调用B,有时调用存储在C中的函数 C:一张桌子(本地的)。它包含的表包含的表可以包含的表。。。最后将包含函数。这些函数可以调用A或B 然后是返回函数D,当使用require加载模块时将返回该函数。它会叫A 最后,它看起来很像这样: --don't pay attention to what the functions do: --I am only writing them down to ex

在vanilla Lua 5.2中,我有一个模块,包含:

  • 两个本地函数A和B:B总是调用A,A有时调用B,有时调用存储在C中的函数

  • C:一张桌子(本地的)。它包含的表包含的表可以包含的表。。。最后将包含函数。这些函数可以调用A或B

  • 然后是返回函数D,当使用
    require
    加载模块时将返回该函数。它会叫A

最后,它看起来很像这样:

--don't pay attention to what the functions do:
--I am only writing them down to explain how they interact with each other

local A, B, C

C = {
    ...
    {
        function(a)
            B(a)
         end
    }
    ...
}

A = function(a)
    ...
    if (...) then
        B(a)
    end
    ...
    if (...) then
        C[...]...[...](a)
    end
    ...
end

B = function(a)
    A(a)
end

return function(s) -- we called this one D
    A(s)
end
现在,我的问题是:C的声明使用了它自己的局部变量、元表和所有这些东西,我把它的声明封装在一个
do。。。结束

它也很长——所有这些表格都在表格中,每个大括号和缩进都有换行符,等等。所以我想把它放在它自己的模块中,但是它不能访问B

所以,我的问题是:有没有一种方法可以将B,甚至a传递给文件,在加载时声明C?我的意思是,如果可能的话:

--in the original module
local A, B, C

C = require("c", A, B)

...
然后,在c.lua中:

local A, B = select(1, ...), select(2, ...)

C = {
    ...
    {
        function(a)
            B(a)
        end
    }
    ...
}
我真的不知道怎么做

是否有一种方法可以将变量从所需文件传递到所需文件,而不涉及插入全局命名空间的变量

是否有一种方法可以将变量从所需文件传递到所需文件,而不涉及插入全局命名空间的变量

不是使用默认的
require
函数,但这不应该阻止您编写自己的
require
函数来实现这一点。显然,这将使解决方案针对您的应用程序,因此当使用标准Lua解释器(具有其
require
功能)时,这些所需文件将无法正常工作。

主模块:

local A, B, C

A = function(a)
    ...
    if (...) then
        B(a)
    end
    ...
    if (...) then
        C[...]...[...](a)
    end
    ...
end

B = function(a)
    A(a)
end

C = require("c")(A, B)

return function(s) -- we called this one D
    A(s)
end

c、 卢阿:

local function C_constructor(A, B)
    local C = 
        {
            ...
            {
                function(a)
                    B(a)
                end
            }
            ...
        }
    return C
end

return C_constructor

这很聪明,很聪明,这实际上会阻止我。我不是在写一个独立的应用程序,我总有一天会把整个代码库都改成C或C++,那又何必费心呢?