3

lua ファイルを 1 回だけ実行し、その後その lua ファイルを実行しようとするとノーオペレーションになる方法があるかどうか疑問に思っていました。

私はすでに、C++ ヘッダーの #if/else/endif トリックに似た何かを行うことを考えていました。これを実装する標準的な方法があるかどうか疑問に思っています。

ジェームズ

4

3 に答える 3

11

まあ、requireほとんどそれを行います。

require "file" -- runs "file.lua"
require "file" -- does not run the "file" again
于 2009-09-02T19:33:22.100 に答える
2

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
于 2009-09-03T02:01:53.320 に答える