lua ファイルを 1 回だけ実行し、その後その lua ファイルを実行しようとするとノーオペレーションになる方法があるかどうか疑問に思っていました。
私はすでに、C++ ヘッダーの #if/else/endif トリックに似た何かを行うことを考えていました。これを実装する標準的な方法があるかどうか疑問に思っています。
ジェームズ
まあ、require
ほとんどそれを行います。
require "file" -- runs "file.lua"
require "file" -- does not run the "file" again
require の唯一の問題は、ファイル名ではなくモジュール名で機能することです。特に、require はパスを含む名前を処理しません (ただし、package.path と package.cpath を使用してファイル システム内のモジュールを検索します)。
パスで名前を処理したい場合は、次のように dofile に単純なラッパーを書くことができます:
do
local cache={}
local olddofile=dofile
function dofile(x)
if cache[x]==nil then
olddofile(x)
cache[x]=true
end
end
end