NeoLua

提供: MonoBook
2016年12月6日 (火) 08:11時点における108.162.226.161 (トーク)による版
ナビゲーションに移動 検索に移動

NeoLuaとは、オープンソースの下で開発されている.NET Framework向けのLua実装である。

概要

.NET Framework向けのLua実装は多数存在するが、それらは本家LuaのDLLP/Invokeで呼び出すものが多い。

一方、NeoLuaは.NET向けに移植されたCLRでのピュア実装となっている。 つまりIronPythonなどと同じ系列である。 表向きの名前はNeoLuaであるが、内部的な名前空間は「Neo.IronLua」となっており、やはり「Iron〜」である。 NeoLuaはPortable Class LibraryPCL)環境でも何も考えずに一発で動くように作られている点がポイント高い。Xamarin系、MonoGame系では大活躍である。

NeoLuaは「純正Lua」ではなく「Lua互換品」となるため互換性の心配があるがNeoLuaの公式サイトでは「100%」を謳っている。 ほんとかどうかは知らん。 互換性に問題があるようであればNLuaあたりを使ったほうがいいかもしれないが、NeoLuaの方が積極的にメンテナンスされており活況ではある。

使い方

インストール

  • NuGetからNeoLuaを入れろ。
  • 参照に「Microsoft.CSharp」を追加しろ。  ← これ忘れがち

ハロワ

dynamic変数にしておくとLua内のオブジェクトに直接手出しすることができる。インテリセンスが効かない諸刃の剣でもある。 dochunkは小文字だぞ。

            using (var lua = new Lua())
            {
                dynamic g = lua.CreateEnvironment();
                g.dochunk("s = 'hello world';","test");
                Console.WriteLine(g.s);
            }

こういう書き方もできる。 「clr」で標準の名前空間にもアクセスできる。

            using (var lua = new Lua())
            {
                dynamic g = lua.CreateEnvironment();
                g.dochunk(@"
                    s = 'hello world';
                    clr.System.Console.WriteLine(s);
                ");
            }

dynamic変数を使わない方法だとSetMemberValue()だのCallMember()などのメソッドを使う。 この場合のDoChunkはパスカル記法だ。 ついでにまったく関係ないことだがLuaでの文字列連結は「..」だ。

            using (var lua = new Lua())
            {
                var env = lua.CreateEnvironment();
                env.DoChunk(@"
                    name = 'foo';
                    function Hello()
                        return 'hello ' .. name;
                    end
                ","test.lua");

                var ret1 = env.CallMember("Hello");
                Console.WriteLine(ret1.ToString());

                env.SetMemberValue("name", "bar");
                var ret2 = env.CallMember("Hello");
                Console.WriteLine(ret2.ToString());
            }

関連項目

外部リンク

参考文献