4

require必要なスクリプトが見つからない場合に、lua スクリプトが失敗するのを防ぐことは可能ですか?

4

3 に答える 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 に答える