Lua 5.1のパッケージパスでデータファイルを読み取る方法は?Luaのパッケージパスでデータファイルを読み取る方法5.1
私が探しているのは、io.read
のようなものですが、作業ディレクトリ(arg[0]
)の代わりにパッケージディレクトリにあり、ハードコードされた絶対パスは使用していません。それはdofile
のようなものですが、コードを実行することなく、それを文字列として読み込むだけです。
例:
私はtest
フォルダ、test.lua
スクリプトの現在の作業ディレクトリを持っています。
別のフォルダにluapackage
のパッケージがあります。これは、LUA_PATH
環境変数で指定されています。
luapackage
ことができます。
require("luapackage.other_module")
。dofile("other_module.lua")
。
しかしluapackage
を行うことはできません。
io.read("data.txt")
io.read("luapackage/data.txt")
サンプル構造:
+-test/
|
+-test.lua
+-luamodule/
|
+-data.txt
|
+-luamodule.lua
|
+-other_module.lua
をこの例では、test.lua
のみluamodule
が必要です。
-- test.lua
local luamodule = require("luamodule")
そしてluamodule
は、そのモジュールとデータファイルを読み込む必要があります:
-- luamodule.lua
local other_module= dofile("other_module.lua") -- works
-- local other_module= require("luamodule.other_module") -- also works
local data = io.open("data.txt") -- fails
-- local data = io.open("luamodule/data.txt") -- also fails
それは作業ディレクトリ(test
)といないでファイルを検索しますので、それは動作しません。パッケージディレクトリ。
実行中のスクリプトのフォルダにパッケージのコピーを配置すると、io.read(luapackage/data.txt)
が可能です。しかし、すべてのスクリプトはローカルコピーluapackage
を持っていなければなりません。
注:互換性を損なう可能性のあるバイナリパッケージを避けて、私はLuaソリューションを探しています。
ありがとうございます! ローカルPATH = string.match(debug.getinfo(1、 "S")。source、 "^ @(。+ /)[%a% - %d _] +%。lua $") 'および*voilà *! –