如何在 Xcode 中引用多个 Lua 脚本

我在 Xcode 中引用 Lua 脚本时遇到了问题

有两个脚本:

在 bar.lua 中:

bar =function()
    print("bar")
end

在 foo.lua 中:

require "bar"
bar()

在 Xcode 中,我编写了以下代码:

NSString * tagsString = @"bar,foo";
NSArray * tagsArray = [tagsString componentsSeparatedByString:@","];
for (NSString* luaFileName in tagsArray) {
    NSString *path = [[NSBundle mainBundle] pathForResource:luaFileName ofType:@"lua"];
    if (luaL_loadfile(_L, [path UTF8String])!=0){
        NSLog(@"luaL_loadfile error:%s",lua_tostring(_L, -1));
    }
    if (lua_pcall(_L, 0, 0, 0)!=0){
        NSLog(@"lua_pcall error?:%s",lua_tostring(_L, -1));
    }
}

但它不起作用:

lua_pcall error?:...on/2DD58CF6-044C-405C-885F-46B98BF6F355/0317.app/foo.lua:6: module 'bar' not found:
no field package.preload['bar']
no file '/usr/local/share/lua/5.3/bar.lua'
no file '/usr/local/share/lua/5.3/bar/init.lua'
no file '/usr/local/lib/lua/5.3/bar.lua'
no file '/usr/local/lib/lua/5.3/bar/init.lua'
no file './bar.lua'
no file './bar/init.lua'
no file '/usr/local/lib/lua/5.3/bar.so'
no file '/usr/local/lib/lua/5.3/loadall.so'
no file './bar.so'

我非常确定 ./bar.lua 存在

点赞
用户5675002
用户5675002

很可能您当前的工作目录不是应用所在的目录,因此 Lua 找不到 bar.lua 文件,即使它与 foo.lua 在同一目录中。

Lua 会搜索几个位置,其中一些是通过绝对路径进行搜索,如 '/usr/local/share/...',而其他位置是通过相对路径进行搜索。

./bar.lua 通过相对路径进行搜索,因此当前的工作目录非常重要。

2017-03-19 09:59:48
用户7733855
用户7733855

我用下面这段代码解决了这个问题:

NSString *appPath = [[NSBundle mainBundle] resourcePath]; 
[self runLuaCode:[NSString stringWithFormat:@"appPath = '%@/?.lua'",appPath]];
2017-03-30 04:01:27