2

次の行のluaコードがありました:

JSON = loadfile("JSON.lua")()

ファイルJSON.luaは、その行の元となったluaコードと同じディレクトリにあります。このコードはしばらくの間機能しましたが、luaソース、JSON.lua、ファイルのアクセス許可、またはluaコードを実行していたディレクトリを変更せずに、その行にnilエラーがあります。(luaコードに影響を与える可能性のある関連する変更はありません。)

アサーションを追加すると、ファイルが見つからないことが原因でエラーが発生したことがわかりました。ファイルのアクセス許可を操作してマシンを再起動しても問題は解決せず、チェックインして完全に機能していたコードをプルバックしてもエラーは解決しませんでした。

上記の行を変更して、そのJSON.luaファイルへの絶対パスを提供することでエラーを解決しました。

絶対パスのないコードがしばらくの間機能し、その後機能しなくなった理由を説明するものはありますか?

注:この動作と非動作の動作は、1週間に2回発生しました。私は戸惑い、修正を見つけましたが、その断続的な動作の説明については本当に興味があります。

4

2 に答える 2

2

Luaはpackage.path、検索するディレクトリのリストとして、設定されている場合は環境変数LUA_PATHからデフォルト値が取得されるを使用します。このリストの先頭に配置.して現在のディレクトリからファイルをロードするか、ファイルをリストのパスに配置することができます。

于 2012-12-26T00:13:45.410 に答える
1

私はまったく同じ問題を見つけたので、これについての遅い答え。

まず、前の回答とは異なり、検索パスをloadfile使用しません。package.path指定されたディレクトリのみを検索します。また、ディレクトリを指定しない場合は、「現在のディレクトリ」のみが検索されます。なぜそれが機能しなくなったのか正確には説明できませんが、おそらくあなたのLuaコードは以前とは異なる「現在のディレクトリ」で実行されています。

考えられる修正は2つあります。1つは、への絶対パスを指定することloadfileです。

JSON = loadfile("c:\\my_folder\\JSON.lua")()

別の修正方法は、使用している特定のライブラリによって異なります。これは、JeffreyFriedlのLuaJSONライブラリであると思われます。これは新しいLuaモジュールメカニズムをサポートしているため、検索パスをサポートするrequireを使用してモジュラーをロードできます。package.path

JSON = require("JSON")
于 2015-10-19T18:33:38.390 に答える