gpt4 book ai didi

lua - loadfile、require 和 import 有什么区别

转载 作者:行者123 更新时间:2023-12-04 10:03:38 24 4
gpt4 key购买 nike

似乎有多种方法可以从另一个文件访问一个文件。为什么我会选择一种方法而不是另一种?

local a = loadfile('foo.lua')()
local b = require 'foo.lua'
local c = import 'foo.lua'

最佳答案

没有import Lua 标准库中的函数。不适用于 5.1、5.2 或 5.3。也许您正在考虑提供此功能的其他代码;您必须询问该功能的提供者。
require不加载 .lua文件;它加载模块。究竟是什么requiredefined by package.loaders 在 5.1 或 package.searchers 在 5.2/3 中。一个特定的模块可以实现为 .lua文件,但它也可能是 .dll/.so .或者,如果模块在应用程序内部,它可能是在编译时间表中查找的名称。或者它可以从互联网上下载一些东西。或者任何东西,取决于 loaders/searchers做。

默认 loaders/searchers可以加载.lua文件,但它们仅根据 Lua 搜索路径搜索目录。此路径由环境变量初始化,但用户可以覆盖它。

模块命名约定也有一些子模块的概念。您几乎从不将“.lua”放在模块名称中。 require加载模块,而不是文件;加载的任何文件都是加载模块的副作用。

哦,还有 require缓存加载的模块。使用相同的模块名称再次调用它只会返回先前加载的模块。如果你想重新加载一个模块,你必须先有效地卸载它,这需要编辑模块缓存。 package.loaded存储模块缓存;将条目设置为 nil将其从缓存中删除,强制 require重新加载它。

请注意,这不会自动更改已获取模块的任何代码。很多 Lua 文件会有类似 local module_name = require "module_name" 的内容。在文件的顶部。您无法访问此类脚本并更改它们已经获取的内容。您将不得不重新执行此类脚本。

因此,尝试就地更改模块可能是危险的,除非代码是专门编写的。
loadfile从磁盘加载文件并将其编译为 Lua block 。它使用 C 标准库工具来进行文件加载,因此路径与编译 Lua 时使用的 C 库实现一致。它返回加载的 block 但不执行它。

关于lua - loadfile、require 和 import 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34235540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com