このLuaでローカルのrequireを使用するのはなぜですか?
local audio = require "audio"
と
require "audio"
との違いは、前者のいずれかの利点は何があるのか?
このLuaでローカルのrequireを使用するのはなぜですか?
local audio = require "audio"
と
require "audio"
との違いは、前者のいずれかの利点は何があるのか?
ルアでは、モジュールはいくつかのパブリック関数をエクスポートするオブジェクトです。 Luaでモジュールを定義するには、2つの方法があります。例えば:
module(..., package.seeall)
Audio = {}
function Audio:play()
print("play")
end
または代わり:
Audio = {}
function Audio:play()
print("play")
end
return Audio
前者はモジュールを定義する古い方法ですが、それはまだ多くの例で見つけることができます。後者はモジュールを定義する好ましい方法です。
モジュールをローカル変数に割り当てない限り、エクスポートされた変数とメソッドを参照する方法はありません。
audio
にグローバル関数が定義されていた場合、これらの関数はaudio
をインポートすると利用可能になります。グローバル関数と変数は、グローバルオブジェクトにアタッチされます。 Luaには、定義されたすべてのグローバル変数と関数を含む_Gという変数があります。動作しますが、グローバルオブジェクトにすべてのものを置くことがある。例えば、
audio.lua
function play()
print("play")
end
main.lua
require("audio")
play()
それとも
require("audio")
_G.play()
いくつかの不便s。変数と関数は上書きされる可能性があります。最終的に、グローバルオブジェクトは膨らんで膨らみます。モジュール内のすべてを構造化する方がよいので、変数とメソッドはそれぞれの名前空間にカプセル化されます。
'local Audio = {}'を使用して、それをグローバルとして保存するかどうかをクライアントに決定させるのが一般的です。 – lhf
主な理由は、インポートされたファイルがグローバル名前空間を壊さないようにするためです。また、名前の競合を避けるという別の利点があると思います。 – Timmmm