2012-05-18 29 views
1

我試圖使用https://github.com/aptiva/TLC加載在Lua模塊通過要求(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模塊?

謝謝!

回答

1

./?/init.lua添加到LUA_PATH

+0

嘗試 - 沒有解決它。 :-( – user1383359

+0

發現我的錯誤,現在可以使用。 – user1383359

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,目錄由分號分隔很重要(「;」)。指定的另一種方式是什麼目錄進行搜索,它使用(一個Lua文件中)的Lua變量package.path

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