通过Require(TLC)加载Lua模块

时间:2012-05-18 20:56:04

标签: lua

我正在尝试使用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模块?

谢谢!

2 个答案:

答案 0 :(得分:2)

./?/init.lua添加到LUA_PATH

答案 1 :(得分:0)

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

当需要模块时,Lua使用环境变量 LUA_PATH 来查找所需模块的位置。特殊符号'?'是一个匹配任何字符串的通配符,因此当require("module")LUA_PATH="?;./?.lua"时,Lua将搜索' 模块'和' 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不同,目录由分号(&#34 ;;")分隔。另一种指定要搜索的目录的方法是,它使用Lua变量package.path(在Lua文件中):

package.path = "./?/init.lua;"..package.path
local objc = require("objc")