Lua-modules

提供:Dev Guides
移動先:案内検索

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は、これの使用を非推奨にしています。