Luaでモジュールを使用するための基本的なチュートリアル
モジュールとは何ですか?
モジュールは、ロードする必要があるグローバルに名付けられた1つのライブラリで使用できるようなもので、includeのテーブルを持っています。モジュールは、多くの関数や変数を含むことができます。これらの関数や変数はすべて、それを名前空間としてテーブルでラップされています。また、このテーブル上で必要なものを返すために必要な規定があり、非常に行儀の良いモジュールです。
Luaモジュール
テーブルの中でモジュールを使用すると、様々な点で役に立ちます。他のluaのテーブルを操作するのと同じように、モジュールを操作することができるようになります。モジュールを操作できる結果、luaのような特別な仕組みを必要とする言語の量に追加機能を提供します。luaモジュールのおかげで、この自由な方法で、ユーザーは様々な方法でLuaの関数を呼び出すことができます。例えば、以下のようなものです。
-- 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では、必要なモジュールを全てロードするためにprescribeという高レベルの関数が用意されています。モジュールをロードするために、モジュールに関する情報が多くなりすぎないように、できるだけシンプルにしています。prescribe関数は、モジュールがいくつかの値をコードのブロックとして定義しており、それが実際には関数または含まれる関数のテーブルであると単純に仮定しています。
例
簡単な例として、ある関数が数学的演算を行い、このモジュールをmymathと呼び、ファイル名をmymath.luaとする場合を考えてみましょう。
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
さて、そのLuaモジュール内の別のファイル、moduletutorial.luaにアクセスすると、次のようになります。
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)
このコードを実行するためには、2つのluaファイルを同じディレクトリに置くか、パッケージパスにモジュールファイルを置いて、追加の設定を生成する必要があります。上記のプログラムを実行すると、次のような出力が得られます。
10
200
1.5
覚えておきたいこと
- ファイルと同じディレクトリでモジュールを実行します。
- モジュール名とそのファイル名は同じである必要があります。
- これは関数を指定するリターンモジュールなので、ベストプラクティスの他のタイプの実装が他にあったとしても、上記のような良い実装をすることも可能です。
旧来のモジュール実装方法
同じ例を書き直してみましょう。すべての型に対する実装をチェックしてみてください。これはLuaのバージョン5.1と5.0を使っています。mathモジュールを以下に示します。
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モジュールは、以下のように使用します。
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)
上記を実行すると、同じ出力が得られます。しかし、安全性が低いとされる古いバージョンのコードを使用することをお勧めします。Corona SDKのようなLuaでプログラミングするためのソフトウェア開発キットの多くは、時代遅れになっているのです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン