「NeoLuaのインストールとハローワールド」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「== インストール == * NuGetからNeoLuaを入れろ。 * 参照に「Microsoft.CSharp」を追加しろ。  ← これ重要(ダイナミック版を...」)
 
 
13行目: 13行目:
 
「clr」で標準の名前空間にもアクセスできる。
 
「clr」で標準の名前空間にもアクセスできる。
 
<source lang="csharp">
 
<source lang="csharp">
            using (var lua = new Lua())
+
using (var lua = new Lua())
            {
+
{
                dynamic g = lua.CreateEnvironment();
+
    dynamic g = lua.CreateEnvironment();
                g.dochunk(@"
+
    g.dochunk(@"
                    s = 'hello world';
+
        s = 'hello world';
                    clr.System.Console.WriteLine(s);
+
        clr.System.Console.WriteLine(s);
                ");
+
    ");
            }
+
}
 
</source>
 
</source>
  
27行目: 27行目:
 
ついでにまったく関係ないことだがLuaでの文字列連結は「..」だ。
 
ついでにまったく関係ないことだがLuaでの文字列連結は「..」だ。
 
<source lang="csharp">
 
<source lang="csharp">
            using (var lua = new Lua())
+
using (var lua = new Lua())
            {
+
{
                var env = lua.CreateEnvironment();
+
    var env = lua.CreateEnvironment();
                env.DoChunk(@"
+
    env.DoChunk(@"
                    name = 'foo';
+
        name = 'foo';
                    function Hello()
+
        function Hello()
                        return 'hello ' .. name;
+
            return 'hello ' .. name;
                    end
+
        end
                ","test.lua");
+
    ","test.lua");
  
                var ret1 = env.CallMember("Hello");
+
    var ret1 = env.CallMember("Hello");
                Console.WriteLine(ret1.ToString());
+
    Console.WriteLine(ret1.ToString());
  
                env.SetMemberValue("name", "bar");
+
    env.SetMemberValue("name", "bar");
                var ret2 = env.CallMember("Hello");
+
    var ret2 = env.CallMember("Hello");
                Console.WriteLine(ret2.ToString());
+
    Console.WriteLine(ret2.ToString());
            }
+
}
 
</source>
 
</source>
  
 
[[category: NeoLua]]
 
[[category: NeoLua]]

2021年2月16日 (火) 05:14時点における最新版

インストール[編集 | ソースを編集]

  • NuGetからNeoLuaを入れろ。
  • 参照に「Microsoft.CSharp」を追加しろ。  ← これ重要(ダイナミック版を使う場合のみ必須)

ハロワ[編集 | ソースを編集]

まずは定番のハロワだ。

NeoLuaには2種類の実行環境がある。頭の固い人向けの静的版と、ユルユルな人向けのダイナミック版だ。

CreateEnvironmentメソッドの戻り値の型を、「var」(型推論)にすると静的版に、「dynamic」にするとダイナミック版になる。ダイナミック版はインテリセンスが効かない諸刃の剣であるが、ある程度慣れると圧倒的にこちらの方が便利かつ簡潔明瞭である。ちなみにダイナミック版のdochunkは小文字だぞ。

こういう書き方もできる。 「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());
}