NeoLuaに.NETで関数を追加する
ナビゲーションに移動
検索に移動
NeoLuaではLuaスクリプトでfunction構文を使って関数を書く方法だけでなく、C#で書いた関数を追加することもできる。NeoLuaではLua標準ライブラリの「os名前空間」が未実装だったりするので、日付・時間などを扱おうと思う場合は、この方法で実装すれば綺麗に決まる。Lua側からclr名前空間を叩いて実装する方法もあるがあんまり綺麗じゃない。
using (var lua = new Lua())
{
var env = lua.CreateEnvironment();
// C#で書かれたadd関数を追加
env.Add("add", new Func<int,int,int>((a,b) => a+b));
// Lua側から呼び出してみる
var ret = env.DoChunk(@"return add(1,2)", "main.lua");
Console.WriteLine(ret);
}
ちなみにdynamic版の場合だと更に簡潔明瞭。.NETのFunc型をそのままブチ込める。
using (var lua = new Lua())
{
var env = lua.CreateEnvironment();
// C#で書かれたadd関数を追加
env.add = new Func<int,int,int>((a,b) => a+b);
}