Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在lua中实现includeguard以防止lua多次加载同一文件?_Lua - Fatal编程技术网

如何在lua中实现includeguard以防止lua多次加载同一文件?

如何在lua中实现includeguard以防止lua多次加载同一文件?,lua,Lua,如何在Lua中实现一个新的应用程序?因为当两个文件需要相同的lua文件时,有时效果会出乎意料。所以我希望lua只处理一次文件。通常不需要这样做 Luas require函数首先检查表package.loaded中您试图要求的名称,如果它存在,则接受该名称。如果没有,并且它实际加载了模块,它会将其写入该表,以便下次使用 简单地说:Require被记忆 请注意,这适用于模块返回表或函数的常见情况 当模块返回nil时,它将变为true。但是,如果模块返回false,它将把false写入package.

如何在Lua中实现一个新的应用程序?因为当两个文件需要相同的lua文件时,有时效果会出乎意料。所以我希望lua只处理一次文件。

通常不需要这样做

Luas require函数首先检查表package.loaded中您试图要求的名称,如果它存在,则接受该名称。如果没有,并且它实际加载了模块,它会将其写入该表,以便下次使用

简单地说:Require被记忆

请注意,这适用于模块返回表或函数的常见情况

当模块返回nil时,它将变为true。但是,如果模块返回false,它将把false写入package.loaded,导致它一次又一次地被加载

我刚刚意识到这并不能回答真正的问题,因为很可能确实需要使用一个真正的包含守卫

不用说

除非你知道你真的需要它,否则不要使用它 给定一个模块foo,如下所示:

本地foo={} 打印加载模块;这应该只发生一次' 函数foo.id。。。回来终止 返回foo 它可以很容易地修改为如下内容:

局部功能负荷 本地foo={} 打印加载模块;这应该只发生一次' 函数foo.id。。。回来终止 返回foo 终止 如果没有,那么已经加载了 _G.FOO\u已加载=加载 终止 return\u G.FOO\u已加载
我使用_G是希望,即使它运行在一些奇怪的修改过的环境中,无论是谁创建了它,都能像人们应该经常做的那样,在_G中提供全局环境。在正常情况下,它实际上没有什么作用,除非您有一个与全局变量一样命名的局部变量。

通常不需要这样做

Luas require函数首先检查表package.loaded中您试图要求的名称,如果它存在,则接受该名称。如果没有,并且它实际加载了模块,它会将其写入该表,以便下次使用

简单地说:Require被记忆

请注意,这适用于模块返回表或函数的常见情况

当模块返回nil时,它将变为true。但是,如果模块返回false,它将把false写入package.loaded,导致它一次又一次地被加载

我刚刚意识到这并不能回答真正的问题,因为很可能确实需要使用一个真正的包含守卫

不用说

除非你知道你真的需要它,否则不要使用它 给定一个模块foo,如下所示:

本地foo={} 打印加载模块;这应该只发生一次' 函数foo.id。。。回来终止 返回foo 它可以很容易地修改为如下内容:

局部功能负荷 本地foo={} 打印加载模块;这应该只发生一次' 函数foo.id。。。回来终止 返回foo 终止 如果没有,那么已经加载了 _G.FOO\u已加载=加载 终止 return\u G.FOO\u已加载
我使用_G是希望,即使它运行在一些奇怪的修改过的环境中,无论是谁创建了它,都能像人们应该经常做的那样,在_G中提供全局环境。在正常情况下,除非您有一个名为global的局部变量。

require已经有了include-guard,否则它实际上没有什么作用。请在include guard工作不正确的地方显示您的代码。require已具有include guard。请在include guard工作不正确的地方显示您的代码。Requirie已被记忆。但它不是按文件记录的。它只是根据传递给require的名称来完成的。@Nicolas Bolas它的主要意思是,如果你愿意,你可以射自己的腿,仅此而已。它更像是经典的ifdef/define-guard,而不是C术语中的pragma。但它不是按文件记录的。它只是根据传递给require的名称来完成的。@Nicolas Bolas它的主要意思是,如果你愿意,你可以射自己的腿,仅此而已。它更像是经典的ifdef/define-guard,而不是C术语中的pragma。