luasubを簡単に定義する。
luasub.lua
-- luasub.lua do local mt = {} -- 呼び出された時の処理 mt.__index = function(t, k) return _G["NSCOM_"..k] end -- 代入時の処理 mt.__newindex = function(t, k, v) local com_name = "NSCOM_"..k if _G[com_name] then NSOkBox(k.."を二度定義しようとしました。", "luasub") NSEnd() else NSExec("_luasub "..k) _G[com_name] = v end end -- 定義 luasub = setmetatable({}, mt) end
使い方
-- "sample"のポップアップを出すだけの命令、sampleを定義する。 luasub.sample = function() NSOkBox("sample", "sample") end
luasubの後に、ドットと命令名を付け加え、それにNScripter側で命令が実行された際にかわりに実行される関数(function)を代入すると、後はプログラムが勝手にやってくれます。
解説
通常、luasubのシステムはこのように説明されます。
最初の定義
define節でluasubで命令名を定義。
luasub sample
lua側で、実行される実体を定義。
function NSCOM_sample() ... end
両方に記述しなければならない。
Lua側だけでなんとかなる。
NSExec("luasub sample") function NSCOM_sample() ... end
これなら、Lua側で命令を増やすも減らすも自由自在。しかし、同じ命令名を二度も書きたくない。
つうか、それでミススペルしてつまらないところでひっかかってイラっとしたことがある。
命令名を一回しか書きたくない。
こうなった。
luasub.sample = function() ... end
なんてシンプル。