Lua-modules
Lua-モジュール
モジュールとは何ですか?
モジュールは、_require_を使用してロードできるライブラリに似ており、テーブルを含む単一のグローバル名を持っています。 このモジュールは、多数の関数と変数で構成できます。 これらの関数と変数はすべて、名前空間として機能するテーブルにラップされています。 また、適切に動作するモジュールには、必要に応じてこのテーブルを返すために必要な準備があります。
Luaモジュールの専門
モジュールでテーブルを使用すると、さまざまな方法で役立ち、他のLuaテーブルを操作するのと同じ方法でモジュールを操作できます。 モジュールを操作する機能の結果として、他の言語が特別なメカニズムを必要とする追加機能を提供します。 Luaのモジュールのこの無料のメカニズムにより、ユーザーは複数の方法でLuaの関数を呼び出すことができます。 それらのいくつかを以下に示します。
-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")
-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")
-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")
上記のサンプルコードでは、特別なコードを追加しなくても、Luaのプログラミングがどれほど柔軟であるかを確認できます。
require関数
Luaは、必要なすべてのモジュールをロードするために_require_と呼ばれる高レベル関数を提供しています。 モジュール上にロードする情報が多すぎるのを避けるため、可能な限りシンプルに保たれます。 require関数は、いくつかの値を定義するコードの塊としてモジュールを想定しています。実際には、関数または関数を含むテーブルです。
例
1つの関数に数学関数がある単純な例を考えてみましょう。 このモジュールをmymathと呼び、ファイル名をmymath.luaとします。 ファイルの内容は次のとおりです-
local mymath = {}
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
return mymath
ここで、別のファイル(moduletutorial.luaなど)でこのLuaモジュールにアクセスするには、次のコードセグメントを使用する必要があります。
mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)
このコードを実行するには、2つのLuaファイルを同じディレクトリに配置する必要があります。または、パッケージパスにモジュールファイルを配置して、追加のセットアップが必要な場合もあります。 上記のプログラムを実行すると、次の出力が得られます。
30
10
200
1.5
覚えておくべきこと
- モジュールと実行するファイルの両方を同じディレクトリに配置します。
- モジュール名とそのファイル名は同じでなければなりません。
- require関数のモジュールを返すことはベストプラクティスです。したがって、他のタイプの実装を他の場所で見つけることもできますが、モジュールは上記のように実装することが望ましいです。
モジュールを実装する古い方法
package.seeallタイプの実装を使用する古い方法で同じ例を書き換えましょう。 これは、Luaバージョン5.1および5.0で使用されていました。 mymathモジュールを以下に示します。
module("mymath", package.seeall)
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
moduletutorial.luaのモジュールの使用法を以下に示します。
require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)
上記を実行すると、同じ出力が得られます。 ただし、古いバージョンのコードを使用することをお勧めします。安全性が低いと想定されます。 Corona SDKのようなプログラミングにLuaを使用する多くのSDKは、これの使用を非推奨にしています。