奇怪的问题在这里。
我有一个Lua脚本(' human.lua'),它通过C ++应用程序中的dofile()
执行。
我尝试在第一行以非常标准的方式加载另一个AI脚本文件:
behavior_chunk = assert(loadfile("testBehavior.lua"))
此抛出无法打开testBehavior.lua:没有这样的文件或目录"。 testBehavior.lua与human.lua在同一个目录中。
这是怎么回事? package.path会以某种方式错误地设置吗? 我已就此进行了大量研究,无法找到可能导致此特定问题的原因。
也许我错过了一些非常明显的东西。
答案 0 :(得分:1)
loadfile
路径相对于工作目录,而不是相对于脚本位置。因此,如果您从文件夹A
启动Lua以运行B\human.lua
,则loadfile("C/testBehavior.lua")
中的human.lua
会在testBehavior.lua
中查找A/C
,而不是B/C
1}}。
因此,如果你的文件夹结构是:
Foo
yourLuaApp.exe
Scripts
human.lua
file1.lua
file2.lua
ai
testBehavior.lua
并说你有C ++
int main(argc, char* argv[])
{
... init Lua ...
std::string fullname = "scripts/" + argv[1];
if (luaL_dofile(pLua, fullname.c_str()))
std::cerr << "error" << endl;
else
std::cout << "success" << endl;
}
然后你会得到这些结果:
C:\Foo> yourLuaApp.exe file1.lua
success
C:\Foo> yourLuaApp.exe ai\testBehavior.lua
success
但
C:\Foo\Scripts> ../yourLuaApp.exe file1.lua
error
因为您是从Scripts
文件夹启动应用程序的,该文件夹不包含名为Scripts
的文件夹。
答案 1 :(得分:1)
感谢您的更新。
然而,在C ++中加载脚本可以完美地运行,当我从WITHIN加载Lua脚本时,问题出现了,我从C ++加载了Lua脚本:
behavior_chunk = assert(loadfile("testBehavior.lua"))
如何在Lua脚本(而不是C ++)中正确使用loadfile来在同一目录或子目录中加载另一个Lua文件?
我的理由是我装载了人类。来自&#39;脚本&#39;用C ++编写的。现在里面是人类的.lua&#39;我加载了另一个脚本,该脚本与该脚本位于同一目录中,那么为什么这样做不起作用呢?
也许我没有说清楚这一点。如果情况确实如此,我道歉。