2013-01-09 24 views
1

我们希望将第三方Lua模块(比如foo)集成到我们的CoronaSDK应用程序中。这个模块模块CoronaSDK中package.path的问题

主代码是在foo/init.lua,被要求作为require 'foo'

我们把这个模块插入corona/foo

corona/foo$ ls 
    init.lua 

corona/main.lua我们:在模拟器

package.path = package.path .. ";" 
    .. package.path:gsub("?.lua", "?/init.lua") 

require 'foo'作品。然而,它并不在设备上运行:

Lua Runtime Error: lua_pcall failed with status: 2, error message is: 
module 'foo' not found:resource (foo.lua) does not exist in 
archive 
    no field package.preload['foo'] 
    no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo.lua' 
    no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo.lua' 
    no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo/init.lua' 
    no file '/var/mobile/Applications/0B609A43-54E8-40E5-9D44-F3C93CC4031E/Appname.app/foo/init.lua' 
    no file './foo.so' 

奇怪的是,require 'foo.init'确实工作。

任何线索?

+0

这是非常奇怪的行为。如果'foo.init'起作用,那么理论上'foo'应该可以工作,如果'/ init.lua'在你的包路径中,它看起来是错误输出。 'foo'模块是如何设置的;它返回一个表或它使用模块()? Corona是否可能使用定制的'package.loaders'?你有没有试过创建一个最小化的测试用例来重现这个问题? –

+0

Corona可能确实使用自定义'package.loaders'。 –

+0

foo模块如何设置;它返回一个表或它使用模块()? 都不是,该模块只是执行一些代码 难道科罗纳使用自定义package.loaders? http://docs.coronalabs.com/api/library/package/loaders.html 你有没有尝试创建一种再现这个问题最小测试用例? 是 –

回答

-1

试试这个

package.path = package.path ..“;” .. package.path:

dir.luafile.lua:GSUB( “?.init.lua” “?LUA”)称为包LUA文件

路径名称应该这样做

,而不是DIR/luafile.lua

希望帮助

+0

谢谢,但是这个代码不工作太 –

+0

'package.path'应使用系统路径分隔符,而不是'.'。 –

1

是您的文件名

foo.lua或foo.lua?

它适用于两种情况下的模拟器,但在设备中,首都很重要。

我有这个噩梦(我想知道为什么我的SVN客户端改变了我的一个文件的资本......我花了一个多小时才知道出了什么问题,因为我的模块突然在设备中找不到)

+0

4岁,仍然有用... – Crazyrems