2016-04-24 3 views

答えて

5

ルアでは、モジュールはいくつかのパブリック関数をエクスポートするオブジェクトです。 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。変数と関数は上書きされる可能性があります。最終的に、グローバルオブジェクトは膨らんで膨らみます。モジュール内のすべてを構造化する方がよいので、変数とメソッドはそれぞれの名前空間にカプセル化されます。

+4

'local Audio = {}'を使用して、それをグローバルとして保存するかどうかをクライアントに決定させるのが一般的です。 – lhf

+0

主な理由は、インポートされたファイルがグローバル名前空間を壊さないようにするためです。また、名前の競合を避けるという別の利点があると思います。 – Timmmm

関連する問題