←前 | ↑ 目次 |
次→ |
$Date: 2018/04/16 14:03:21 $
strict.luaは、Lua 5.1.4/5.1.5の配布パッケージに含まれるスクリプトで、これを用いることにより、グローバル変数のタイプミスによる間違いをある程度防ぐことができます。
strict.luaは、Luaスクリプトからrequireで呼び出して使用します。strict.luaをrequireしたLuaスクリプトでは、以下の場合にエラーを発生させます。
strict.luaを使用する場合、すべての関数の外部であるメインチャンクでグローバル変数に値を設定することを、「グローバル変数の宣言」とみなすことができるようになります。宣言されていないグローバル変数を使おうとすると、strict.luaはエラーを発生させるため、タイプミスにより間違ったグローバル変数を使おうとした場合に、それを見つけることができるようになります。
[strict.luaを使わない場合]
print(a) -- 'a'は初めて表れた変数。'nil'と表示される
function f() b = 2 -- 関数内で初めてグローバル変数に値を代入 end f() -- bに2が代入される
[strict.luaを使う場合]
require "strict" print(a) -- 'a'は初めて表れた変数なのでエラー
require "strict" function f() b = 2 -- 関数内で初めてグローバル変数に値を代入しているのでエラー end f() -- エラーで停止する
strict.luaでは、コードを実行しようとして始めてエラーを検出するため、テストを行ったときに実行されなかった部分にあるエラーを検出することができません。すべてのコードを実行するようテストケースを工夫する必要があります。
また、strict.luaは、グローバル変数_Gのメタテーブルを操作しています。そのため、同様に_Gのメタテーブルを操作する他のライブラリとバッティングしてうまく動作しない場合がありえます。
←前 | 目次 ↓ |
次→ |