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でのプログラミングがいかに柔軟であるかを確認できます。
必要な関数
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は、これの使用を非推奨にしています。