4

通常、リモートでソフトウェア関連の質問をすると、他の誰かがすでにまったく同じことを質問しており、私にも役立つ良い回答を得ていることがわかります。

しかし、今回は私の苦境に対する答えを見つけることができませんでした。

私は現在、Lua プログラミングを 1 つまたは 3 つ上に上げようとしており、モジュールを使用したいと考えています。だから、私はこのような構造を持っています:

main.lua
foo/bar.lua

今、main.luaで私は

require("foo.bar")

失敗する、

main.lua:1 module 'foo.bar' not found:
     no field package.preload['foo.bar']
     no file 'foo.bar.lua'
     no file 'foo.bar.lua'
     no file 'foo.lua'

わかりました、何かが間違っている可能性があるので、私は自分が何を間違っているかを確認package.pathするために使用 package.searchpath("foo.bar", package.path)します。

問題は、どちらが正確に正しいかをpackage.searchpath解決foo.barすることです。foo/bar.lua

私が理解しているように、package.searchpathはrequireと同じ方法でモジュールを見つけようとしますが、私の場合はいくつかの不具合があるようです.

奇妙に感じるのはno file 'foo.bar.lua'、エラー出力での繰り返しです

require の使い方を誤解していませんか?

LuaJIT-2.0.0 を使用してチャンクを実行しています


アップデート:

LuaJIT-2.0.0 を使用してチャンクを実行しています <- これが問題の原因でした。在庫の Lua-5.2.2 は期待どおりに動作します

4

1 に答える 1

1
package.path = debug.getinfo(1,"S").source:match[[^@?(.*[\/])[^\/]-$]] .."?.lua;".. package.path
require("foo.bar")

この行によりrequire、他のファイルをロードするように求められたときに、現在のファイルと同じディレクトリが検索されます。代わりに現在のディレクトリからの相対ディレクトリを検索する場合は、" と ?.lua の間に相対パスを挿入します。

以下は、require の説明の一部です。

[...] それ以外の場合は、に保存されているパスを使用して Lua ローダーを検索する必要があります package.path。それも失敗した場合は、package.cpath に格納されているパスを使用して C ローダーを検索します。それも失敗した場合は、オールインワン ローダーを試行します (「参考文献」を参照package.loaders)。

package.path のデフォルト パスは常に、指定されたスクリプトを実行する .exe です。

于 2013-08-08T16:54:22.113 に答える