2

重複の可能性:
グローバル Lua 関数をローカルにするのはなぜですか?

コミュニティの多くの lua スクリプトで、モジュールをスクリプトに追加するようなものを見てきました。

local module = require("module")

しかしlua-manualによると、これはモジュールをロードする方法ではありません。モジュール自体にはモジュール名が含まれているため、

require("module")

module.myfunction() のようにモジュールを使用するだけで十分です。local-definition を使用した最初の例では、「true」を module-var に書き込むだけで、モジュールが正常にロードされたことを示しています。

奇妙なことは、この種の「local module = require("module")」のロードが Web のいたるところで見られることです。このエラーが原因で、lua-community のほとんどのスクリプトが機能しません。また、Web 上でこれに関する問題がまだ見つからないのはなぜだろうか。

次に、実際にモジュールをロードすると、奇妙なエラーが発生することがあります。例:私はスクリプトを持っています

require("purexml.lua")

このエラーが発生したよりも:

no field package.preload['purexml.lua']
no file './purexml/lua.lua'
no file '/usr/local/share/lua/5.1/purexml/lua.lua'
no file '/usr/local/share/lua/5.1/purexml/lua/init.lua'
no file '/usr/local/lib/lua/5.1/purexml/lua.lua'
no file '/usr/local/lib/lua/5.1/purexml/lua/init.lua'
no file './purexml/lua.so'
no file '/usr/local/lib/lua/5.1/purexml/lua.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file './purexml.so'
no file '/usr/local/lib/lua/5.1/purexml.so'
no file '/usr/local/lib/lua/5.1/loadall.so'

しかし、これを行うとうまくいきます:

require("purexml")

ここで本当に明らかな何かが欠けていますか?ちなみにLua 5.1.4を使用しています...

4

2 に答える 2

6

Lua 5.2 では、正常に動作するモジュールは、Lua 5.1 のようにグローバル変数をエクスポートしなくなりました。

ローカル変数による高速化に加えて、Lua の最新バージョンとの互換性のために using を使用する必要がありますlocal module = require "module"

于 2012-09-29T14:47:21.317 に答える
4

local module = require("module")デフォルトのグローバルに加えて、モジュールを含むローカル変数を作成します(ローカルはもちろんグローバルをシャドウします)。ローカルは Lua でアクセスするのがはるかに高速であるため、これが使用される理由として最も可能性が高いのはパフォーマンスです。

モジュールのロード中にファイル拡張子を追加してはいけません。

于 2012-09-29T14:20:07.670 に答える