luasubの自動化

luasub、luacallの自動化 - senzogawaのNな日々を見て。
00.txt側のluacall命令をすっかり忘れていた私(まだ引きずってる)が言うのもなんですが。
私が組んだのは、こう。

-- グローバル環境、_Gで実行
function luasub(com_name, com_function)
	if type(com_name) ~= "string" then return nil end -- パラメータチェック 本当は、有効な文字列かどうかも見た方がいいんだけれども。
	if type(com_function) ~= "function" then return nil end -- パラメータチェック
	local func_name = "NSCOM_"..com_name
	if type(_G[func_name]) == "function" then -- 重複宣言チェック。
		NSOkBox(com_name.."は既に宣言されています。", "luasub")
		return nil
	end
	_G[func_name] = com_function -- Lua側登録
	NSExec("_luasub "..com_name) -- NScripter側登録
	return true
end

で、こんな風に使う。

luasub("new_command", function()
	-- なんか処理
end)

もしくは、

function hoge()
	-- なんか処理
end

luasub("new_command", hoge)

利点としては、

  • module環境下でも簡便にNSCOM命令を定義できる。(ので、遠いところに書いたりしなくてよい)
  • NScripter側のluasub宣言を忘れない。
  • 重複宣言チェックができる。
  • NSCOM_xxx自体はグローバルでも、その本体のfunctionがmodule下にあるので、module内のlocal変数にリーチしやすい。

くらいでしょうか。
まあ、速度度外視なのは変わりませんが。