通过require加载Lua模块的加载(TLC)

我正在尝试使用https://github.com/aptiva/TLC

我尝试:

$ echo $LUA_PATH; echo "====="; find .; echo "====="; luajit-2.0.0-beta10 examples/window.lua

我得到:

?;?.lua;./?/init.lua
=====
.
./examples
./examples/talkingcomputer.lua
./examples/window.lua
./lst
./objc
./objc/BridgeSupport.lua
./objc/dispatch.lua
./objc/init.lua
./README.md
=====
luajit-2.0.0-beta10: error loading module 'objc' from file 'objc':
        cannot read objc: Is a directory
stack traceback:
        [C]: ?
        [C]: in function 'require'
        examples/window.lua:5: in main chunk
        [C]: ?

我的问题:我做错什么了?如何加载objc模块?

谢谢!

原文链接 https://stackoverflow.com/questions/10659629

点赞
stackoverflow用户107090
stackoverflow用户107090

./?/init.lua 添加到 LUA_PATH 中。

2012-05-19 01:29:07
stackoverflow用户134758
stackoverflow用户134758

关于为什么被接受的解决方案有效的进一步解释。

当模块被需要时,Lua使用环境变量 LUA_PATH 来查找所需模块的位置。特殊符号 '?' 是通配符,匹配任何字符串,因此当 require("module")LUA_PATH="?;./?.lua" 时,Lua将在当前目录中搜索 '_module_''_module.lua_'

在上面的问题中,LUA_PATH 最初被定义为:

LUA_PATH="?;?.lua;"

一旦解决方案发布了,用户在 LUA_PATH 的末尾添加了 ./?/init.lua,但它没有起作用。之所以它没有起作用,原因在于当 Lua 尝试解决 require('objc') 时,_objc_ 匹配 LUA_PATH 中的第一个条目(?),而 _objc_ 是一个目录,因此出现了错误。

解决方案是在 LUA_PATH 的开头添加 ./?/init.lua

LUA_PATH="./?/init.lua;?.lua;?;"

关于 LUA_PATH,需要注意的是,与环境变量 PATH 不同,目录之间用分号 (";") 分隔。还有一种指定要搜索哪些目录的方法,那就是使用 Lua 变量 package.path(在 Lua 文件中):

package.path = "./?/init.lua;"..package.path
local objc = require("objc")
2015-09-17 11:30:22