NeoLuaに.NETで関数を追加する

提供: MonoBook
ナビゲーションに移動 検索に移動

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);
            }

関連項目[編集 | ソースを編集]