为Lua生成依赖项?

为Lua生成依赖项?,lua,dependencies,preprocessor,Lua,Dependencies,Preprocessor,我有一个lua项目,在多个目录中指定了lua文件,所有这些文件都位于同一根文件夹下,并且具有一些依赖项 有时,我会遇到这样的问题:当在加载时加载一个表时,由于该表引用的是一个尚未初始化的表,我会得到一个nil异常,例如: Customer = { Type = CustomerTypes.Friendly } 这会导致CustomerTypes出现nil异常,因为CustomerTypes.lua尚未加载 我目前的解决方案是在这些lua文件中简单地调用一个全局函数来加载依赖项脚本

我有一个lua项目,在多个目录中指定了lua文件,所有这些文件都位于同一根文件夹下,并且具有一些依赖项

有时,我会遇到这样的问题:当在加载时加载一个表时,由于该表引用的是一个尚未初始化的表,我会得到一个nil异常,例如:

Customer = 
{
     Type = CustomerTypes.Friendly
}
这会导致CustomerTypes出现nil异常,因为CustomerTypes.lua尚未加载

我目前的解决方案是在这些lua文件中简单地调用一个全局函数来加载依赖项脚本

我想做的是预处理我的lua文件以查找所有依赖项,并在运行时按顺序加载它们,而不需要函数调用或lua文件中的特殊语法来确定这一点(即预处理器将按程序计算依赖项)


这是可以现实地实现的吗?还有其他解决方案吗?(我遇到过一些,但不确定它们是否值得追求)。

与lua一样,有大约230891239122种方法可以解决这个问题。我会不假思索地说出3本书,但我敢打赌我至少可以举例说明其中的101本,并出版一本咖啡桌书

首先,必须说这里的“依赖性”的概念严格取决于您的应用程序。卢阿对此毫无感觉。因此,这与克服lua的缺陷完全不同,它只是在应用程序中创建一个脚本环境,让您感到舒适,这就是lua的全部内容

现在,在我看来,你已经得出了一个结论,即需要预处理来解决给定的问题。我认为这是不必要的。我觉得有点舒服,可以说解决这个问题的一种更传统的方法是在全局范围内创建一个新的索引元方法,它处理“CustomerTypes还不存在”通过引用从文件系统中扫描出来的脚本列表,查找名为
CustomerTypes.lua的脚本,并运行该脚本

但也许你有一些很好的理由要求它严格地作为预处理。在您的情况下,我将首先考虑“依赖项”是在脚本文件系统中找到的脚本的任何名称。然后,使用刚刚创建的定义/列表扫描每个脚本以查找依赖项的名称,并在每个脚本前添加一个
load(dependency)
命令


由于“运行时”或“预处理”的概念在此上下文中有点含糊不清,您可能指的是在脚本编译时。在发现
CustomerTypes
是一个合法的依赖名称后,您可以使用LuaMacros令牌过滤器系统来实现一个宏,该宏将
CustomerTypes
替换为
require(“CustomerTypes.lua”)
或类似的内容。

与lua一样,有大约230891239122种解决方法。我会不假思索地说出3本书,但我敢打赌我至少可以举例说明其中的101本,并出版一本咖啡桌书

首先,必须说这里的“依赖性”的概念严格取决于您的应用程序。卢阿对此毫无感觉。因此,这与克服lua的缺陷完全不同,它只是在应用程序中创建一个脚本环境,让您感到舒适,这就是lua的全部内容

现在,在我看来,你已经得出了一个结论,即需要预处理来解决给定的问题。我认为这是不必要的。我觉得有点舒服,可以说解决这个问题的一种更传统的方法是在全局范围内创建一个新的索引元方法,它处理“CustomerTypes还不存在”通过引用从文件系统中扫描出来的脚本列表,查找名为
CustomerTypes.lua的脚本,并运行该脚本

但也许你有一些很好的理由要求它严格地作为预处理。在您的情况下,我将首先考虑“依赖项”是在脚本文件系统中找到的脚本的任何名称。然后,使用刚刚创建的定义/列表扫描每个脚本以查找依赖项的名称,并在每个脚本前添加一个
load(dependency)
命令


由于“运行时”或“预处理”的概念在此上下文中有点含糊不清,您可能指的是在脚本编译时。在发现
CustomerTypes
是合法的依赖项名称后,您可以使用LuaMacros令牌过滤器系统执行宏,该宏将
CustomerTypes
替换为
require(“CustomerTypes.lua”)
或类似的内容,考虑设计依赖关系以兼容并实际上“声明”文件本身中的每个文件的依赖关系:<代码>要求调用(通常以代码<本地客户类型=要求(“CuuleType”)< /代码>一起在文件的顶部附近)。考虑设计依赖关系以兼容并实际上“声明”文件本身中的每个文件的依赖关系:<>代码>要求<代码> >调用(通常以代码<本地客户类型=要求(“CuuleType”)< /代码>一起在文件的顶部附近)。