如何相对于当前加载的脚本加载lua脚本?
我正在加载一个lua脚本,它试图导入一个辅助lua脚本。问题是,我在C++中加载了初始脚本MIN .LUA,并指定了一条路径到这个Lua,然后当MIN。LUA尝试运行其他的DoFILE。LUA它找不到……/P> 我得到 无法打开Other.lua:没有这样的文件或目录 main.cpp Other.lua-存储在与Main.lua相同的文件夹中如何相对于当前加载的脚本加载lua脚本?,lua,Lua,我正在加载一个lua脚本,它试图导入一个辅助lua脚本。问题是,我在C++中加载了初始脚本MIN .LUA,并指定了一条路径到这个Lua,然后当MIN。LUA尝试运行其他的DoFILE。LUA它找不到……/P> 我得到 无法打开Other.lua:没有这样的文件或目录 main.cpp Other.lua-存储在与Main.lua相同的文件夹中 只是将Ma.Lua的路径加载到另一个。从C++到Lua脚本,并在将文件传递到Lua上的DoFILE之前将其添加到文件名。 < P>如果使用LoAROCK
只是将Ma.Lua的路径加载到另一个。从C++到Lua脚本,并在将文件传递到Lua上的DoFILE之前将其添加到文件名。
< P>如果使用LoAROCK,则您的配置可能会覆盖Lua的路径默认配置,这将导致经常发生的问题,确实 关于如何管理这一点,没有任何好的指南,随着Lua的发展,您将面临此类问题,因此我不得不为您和其他可能遇到此类问题的人撰写本文 有很多程序可以用来修复这个嵌套的相对导入,这完全是疯了 您只需将当前路径分配给package.path即可 package.path=package.path.“;”../?。卢亚 package.path=package.path..';..//初始lua' 。是当前目录,并且?替换为您传递给所需的脚本的名称,这样它也必须强制在当前目录中搜索 在某些项目中,您必须管理从嵌套文件夹导入,甚至从后面的文件夹导入 Lua使得管理导入变得特别困难,例如,如果在根文件夹中已经需要的脚本中使用require,则必须从根文件夹开始为要加载的脚本编制索引 除了像requirelibs.classes.functions.public.dev.MyFunction这样的功能外,您还可以执行以下操作: 如果脚本是从已嵌套的脚本导入的,则可以使用。。。在脚本的根目录中,获取仅在Lua5.1及更高版本中导入的路径 >当前路径=。。。如果脚本已嵌套,则将等于基于相对路径的当前脚本的路径 它将返回类似于以下内容的内容: root.lib.classes.currentscriptname 姓氏将等于脚本名,其中。。。被使用了 如果要从脚本当前文件夹导入,请使用…:match.-[^%.]+$”,这将允许您从当前脚本父目录导入,即当前脚本所在的文件夹,而不是主脚本所在的文件夹 因此: 基本=…:匹配'-[^%.]+$',然后匹配requireBASE..'myLib'将从保存当前脚本的文件夹中导入myLib 在本例中,假设您运行main/上的main.lua,然后导入一个名为loader.lua的脚本,该脚本位于main/lib/classes,假设您要加载两个脚本: assets.lua,位于main/lib bullet.lua,位于main/lib/classes 您可以执行以下操作: 在main.lua脚本中: -梅因·卢阿 -来自Lua 5.1及以上版本 -因为这个脚本不是嵌套的 -这将只包含当前脚本的名称,而不包含作为main的“.lua” 本地当前路径=。。。 LIBS_路径=当前_路径..'。lib'-这将保存main.lib 在loader.lua脚本中: -卢阿 -来自Lua 5.1及以上版本 -这将包含main.lib.classes.,它的末尾已经有一个点 本地当前路径=…:匹配'-[^%.]+$' -脚本路径将包含main.lib.classes.loader 本地脚本路径=。。。 -从main/lib/assets.lua导入 本地资产=requireLIB\u路径..'。资产 -从当前目录main/lib/classes导入 本地项目符号=requireBASE..'资产这将允许您从loader.lua加载这两个脚本,而无需太多麻烦,也不会产生不必要的长路径。您可以使用requireOther,然后调用Other中的函数。由于某些原因,luarequire在5.4上不起作用……我昨晚睡觉时就想到了这一点,不过,默认情况下它不检查lua的当前工作目录有点奇怪。@Rick它不检查lua的当前工作目录有点奇怪
#include "sol.hpp"
int main()
{
sol::state m_lua;
m_lua.open_libraries(sol::lib::base);
sol::protected_function_result result = m_lua.script_file("../../../Desktop/Main.lua");
if (!result.valid())
{
sol::error err = result;
std::string what = err.what();
std::cout << "Failed to load script: Test.lua - " << what << std::endl;
}
}
}
print("Main Loaded");
dofile("Other.lua");
print("Other Loaded");