「NeoLua」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
#redirect [[category:NeoLua]]
+
'''NeoLua'''とは、[[オープンソース]]の下で[[開発]]されている[[.NET Framework]]向けの[[Lua]]実装である。
 +
 
 +
== 概要 ==
 +
[[.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]

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)