1

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

谢谢!

4

2 回答 2

2

添加./?/init.luaLUA_PATH.

于 2012-05-19T01:29:07.707 回答
1

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

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

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

LUA_PATH="?;?.lua;"

发布解决方案后,用户./?/init.lua在 LUA_PATH 末尾添加,但它不起作用。它不起作用的原因是当Lua试图解决require('objc') objc匹配LUA_PATH(?)中的第一个条目时,并且objc是一个目录,因此错误。

解决方法是./?/init.lua在LUA_PATH开头添加:

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

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

package.path = "./?/init.lua;"..package.path
local objc = require("objc")
于 2015-09-17T11:30:22.880 回答