【问题标题】:Problems with package.path in CoronaSDKCoronaSDK 中 package.path 的问题
【发布时间】:2012-12-24 00:29:06
【问题描述】:

我们希望将第三方 Lua 模块(例如)foo 集成到我们的 CoronaSDK 应用程序中。

该模块模块主代码在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' 确实有效。

有什么线索吗?

【问题讨论】:

  • 这是非常奇怪的行为。如果foo.init 有效,那么理论上foo 应该也有效,如果?/init.lua 在您的包路径中,它似乎是,由错误输出指示。 foo 模块设置如何;它是返回一个表还是使用模块()? Corona 是否有可能使用自定义 package.loaders?您是否尝试过创建一个重现此问题的最小测试用例?
  • Corona 确实有可能使用自定义 package.loaders
  • foo 模块如何设置;它是返回一个表还是使用模块()?也不是,该模块只是执行一些代码 Corona 是否有可能使用自定义 package.loaders? docs.coronalabs.com/api/library/package/loaders.html您是否尝试过创建一个重现此问题的最小测试用例?是的

标签: lua coronasdk


【解决方案1】:

是你的文件名

foo.lua 还是 Foo.lua?

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

我做了这个噩梦(我想知道为什么我的 SVN 客户端更改了我的一个文件的大写...我花了一个多小时找出问题所在,因为我的模块突然无法在设备中找到)

【讨论】:

  • 4 岁了,还是有用的……
【解决方案2】:

试试这个

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

在包中调用的 lua 文件的路径名应该是这样的:

dir.luafile.lua

而不是 dir/luafile.lua

希望对你有帮助

【讨论】:

  • package.path 应该使用系统路径分隔符,而不是.
猜你喜欢
  • 2016-06-22
  • 2023-04-06
  • 1970-01-01
  • 2012-01-03
  • 2017-09-13
  • 2013-10-10
  • 2012-06-03
  • 2013-03-13
  • 2020-07-23
相关资源
最近更新 更多