「NeoLua」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(カテゴリ:NeoLuaへの転送ページ)
 
(同じ利用者による、間の6版が非表示)
1行目: 1行目:
'''NeoLua'''とは、[[オープンソース]]の下で[[開発]]されている[[.NET Framework]]向けの[[Lua]]実装である。
+
#redirect [[category:NeoLua]]
 
 
== 概要 ==
 
[[.NET Framework]]向けの[[Lua]]実装は多数存在するが、それらは本家Luaの[[DLL]]を[[P/Invoke]]で呼び出すものが多い。
 
 
 
一方、NeoLuaは.NET向けに移植された[[CLR]]でのピュア実装となっている。
 
つまり[[IronPython]]などと同じ系列である。
 
表向きの名前はNeoLuaであるが、内部的な名前空間は「Neo.IronLua」となっており、やはり「Iron〜」である。
 
NeoLuaは[[Portable Class Library]]([[PCL]])環境でも何も考えずに一発で動くように作られている点がポイント高い。[[Xamarin]]系、[[MonoGame]]系では大活躍である。
 
 
 
NeoLuaは「純正Lua」ではなく「Lua互換品」となるためNeoLuaの公式サイトでも「100%の互換性はない」としている。互換性に問題があるようであれば[[NLua]]あたりを使ったほうがいいかもしれないが、NeoLuaの方が積極的にメンテナンスされており活況ではある。
 
 
 
== 使い方 ==
 
=== インストール ===
 
* [[NuGet]]からNeoLuaを入れろ。
 
* 参照に「Microsoft.CSharp」を追加しろ。  ← これ重要
 
 
 
=== ハロワ ===
 
まずは定番の[[ハロワ]]。dynamic変数にしておくとLua内のオブジェクトに直接手出しすることができる。[[インテリセンス]]が効かない諸刃の剣でもある。
 
dochunkは小文字だぞ。
 
<source lang="csharp">
 
            using (var lua = new Lua())
 
            {
 
                dynamic g = lua.CreateEnvironment();
 
                g.dochunk("s = 'hello world';","test");
 
                Console.WriteLine(g.s);
 
            }
 
</source>
 
 
 
こういう書き方もできる。
 
「clr」で標準の名前空間にもアクセスできる。
 
<source lang="csharp">
 
            using (var lua = new Lua())
 
            {
 
                dynamic g = lua.CreateEnvironment();
 
                g.dochunk(@"
 
                    s = 'hello world';
 
                    clr.System.Console.WriteLine(s);
 
                ");
 
            }
 
</source>
 
 
 
dynamic変数を使わない方法だとSetMemberValue()だのCallMember()などのメソッドを使う。
 
この場合のDoChunkは[[パスカル記法]]だ。
 
ついでにまったく関係ないことだがLuaでの文字列連結は「..」だ。
 
<source lang="csharp">
 
            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());
 
            }
 
</source>
 
 
 
== 関連項目 ==
 
 
 
== 外部リンク ==
 
* https://neolua.codeplex.com
 
* https://github.com/neolithos/neolua
 
 
 
== 参考文献 ==
 
{{reflist}}
 
 
 
{{stub}}
 
 
 
[[category: Lua]]
 

2018年10月22日 (月) 02:20時点における最新版