hmLoadCLR内のLua(NeoLua)の独自の文法

  • 概要

    hmLoadCLR内部のスクリプトは、Luaとそっくりになっており、
    Luaの文法のほとんど全てが実行可能です。

    そういったものはLua言語のリファレンスマニュアル等を参照してください。

    ここでは、通常のLuaには存在しない、hmLoadCLR内部で利用されている「NeoLua」独特の文法のみ
    ピックアップします。

    これら独自文法は、汎用性に欠けるため、利用は最低限に控えるようにしましょう。
    可能な限り、C#などマネージdllの内部で処理を済ませるように心がけて下さい。

    大量のNeoLuaスクリプトが必要となるようなら、疑問を持ってください。
    そのような場合は、hmPy/IronPythonの方がよりよい結果となるはずです。

    foreach

    function text()
      return "Hallo", "Welt";
    end;
    
    function test(...)
      foreach c in ... do
        hm.debuginfo(c)
      end
    end
    
    foreach c in text() do
      hm.debuginfo(c)
    end
    
    

    cast

    local s = "Hallo Welt";
    local sb = clr.System.Text.StringBuilder();
    
    sb:Append(cast(string, string.upper(s)));
    
    hm.debuginfo(sb:ToString());
    

    const

    const a = 3 - 2; -- the result of the expression will be assigned to a (int)
    return  a * 2; -- the result will be 2 and not -1, because 1 is included and not 3 - 2
    

    doはC#のusingのようにIDisposeを呼び出す

    do (sw = clr.System.IO.StreamReader([[C:\ccc\loaddll.lua]]))
      hm.debuginfo(sw:ReadToEnd());
    end
    

    clrの基本 ①

    local sys = clr.System;
    
    local StringBuilder = sys.Text.StringBuilder
    local StringBuilder1 = clr.System.Text.StringBuilder -- same result
    

    clrの基本 ②

        local sys = clr.System
        local sb = sys.Text.StringBuilder()
        sb:Append('Hallo '):Append('Welt!')
        local str = sb:ToString()
        

    clrのGeneric ①

    local lstObject = clr.System.Collections.Generic.List[clr.System.Object]()
    local ListGeneric = clr.System.Collections.Generic.List
    local lstString = ListGeneric[clr.System.String]()
    local ListStringType = ListGeneric[clr.System.String]
    local lstString2 = ListStringType()
    

    clrのGeneric ②

    local lst = clr.System.Collections.Generic.List[clr.System.Object]()
    
    lst:Add(1)
    lst:Add(2)
    lst:Add("String")
    
    hm.debuginfo("Enum:")
    foreach a in lst do
      hm.debuginfo(a)
    end;
    
    hm.debuginfo("Index:")
    for i = 0,lst.Count-1,1 do
      hm.debuginfo(i .. ": " .. lst[i])
    end
    
    local cnt = lst.Count
    

    clrの配列 ①

        local a : int[] = clr.System.Int32[3] -- int is not a identifier
        a[0] = 23
        a[1] = 42
        a[2] = 256
        hm.debuginfo( a[0] + a[1] + a[2] )
        

    clrの配列 ②

        const int typeof System.Int32 -- declare the identifier
        local a : int[] = int[](23, 42, 256)
        hm.debuginfo( a[0] + a[1] + a[2] )
        

    clrの多次元配列

        const int typeof System.Int32 -- declare the identifier
        local a = int[2, 2]
        a[0,0] = 23
        a[1,1] = 42
        hm.debuginfo( a[0,0] + a[1,1] )