require
必要なスクリプトが見つからない場合に、lua スクリプトが失敗するのを防ぐことは可能ですか?
3946 次
3 に答える
7
これが基本的な使い方です
if pcall(require, 'test') then
-- done but ...
-- In lua 5.2 you can not access to loaded module.
else
-- not found
end
しかし、Lua 5.2 以降では、require からの戻り値を使用する必要があるライブラリをロードするときにグローバル変数を設定することは推奨されていません。そして、必要な pcall のみを使用します:
local ok, mod = pcall(require, "test")
-- `mod` has returned value or error
-- so you can not just test `if mod then`
if not ok then mod = nil end
-- now you can test mod
if mod then
-- done
end
私はこの機能が好きです
local function prequire(m)
local ok, err = pcall(require, m)
if not ok then return nil, err end
return err
end
-- usage
local mod = prequire("test")
if mod then
-- done
end
于 2013-07-26T09:51:23.180 に答える
5
Lua では、エラーはpcall
関数によって処理されます。あなたはそれでラップrequire
することができます:
local requireAllDependenciesCallback = function()
testModul = require 'test';
-- Other requires.
end;
if pcall(requireAllDependenciesCallback) then
print('included');
else
print('failed');
end
注: pcall
は非常に高価であり、積極的に使用するべきではありません。失敗をミュートする必要があることを確認してください。require
于 2013-07-26T09:09:46.160 に答える
1
を使用する代わりにpcall
、ローダーのリストの最後に独自のローダーを追加して、ローダーが決して失敗しないようにしますが、代わりに文字列などの特別な値を返します。その後、通常どおりrequireを使用して、その戻り値を確認するだけです。(ローダーは 5.2 でサーチャーと呼ばれるようになりました。)
于 2013-07-26T11:18:26.840 に答える