デバッグモードを追加する。
※試案につき、今後大きく変更される可能性があります。
nsluaを使ったNScripterのスクリプトで、スクリプトに手を加えることなく、本番とデバッグを切り替える手段を提供するスクリプト。
debug.lua
-- debug.lua do -- デバッグモードかどうかを判定、記録する。 local debug_mode = false local fh = io.open("debug.txt", "r") if io.type(fh) then fh:close() debug_mode = true end -- デバッグモードであるかどうかを返す関数。 function is_debug() return debug_mode end -- 本番モードであるかどうかを返す関数。 function is_on_air() return not(debug_mode) end -- NSOkBoxの上書き local body = NSOkBox -- バリデーション local valid = {} valid["nil"] = function() return "" end valid["number"] = function(num) return tostring(num) end valid["string"] = function(str) return str end valid["boolean"] = function(bool) return bool and "真" or "偽" end -- 三項演算子もどき valid["table"] = function(t) return Json.Encode(t) end valid["function"] = function(func) return "これは関数です。" end valid["thread"] = function() return "これはスレッドです。" end valid["userdata"] = function() return "これはユーザーデータです。" end NSOkBox = function(message, caption) message = valid[type(message)](message) caption = valid[type(caption)](caption) if debug_mode then body(message, caption) end end end
使い方
これをsysytem.luaの中から呼び出すと、二つの関数が追加される。
- is_debug()
- 現在の稼働モードがデバッグモードであれば、trueを返す。そうでなければfalseを返す。
- is_on_air()
- 現在の稼働モードが本番モードであれば、trueを返す。そうでなければfalseを返す。
本番とデバッグモードの違いは、nscr.exeと同じフォルダの中にある、"debug.txt"の有無に求める。
debug.txt(中身は何でもいい)があればデバッグモードになり、そうでなければ本番モードになる。
また、デバッグモードで使用頻度が高いとおもわれるNSOkBoxを上書きする。
本番では一切NSOkBox関数を使わないと言う前提が必要になるが、デバッグモードならばNSOkBoxが通常通りに機能し、そうでなければNSOkBox関数は起動されても何もしなくなる。
つまり、開発環境ではdebug.txtを置いて必要な時に必要なデータを確認しながら実行できる。
配布の際には、debug.txtを削除してからCDに焼くと、スクリプトには一切手を加えることなく、実行環境へ移行できる(といいなあ)