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

概要

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

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

ここでは、通常のLuaには存在しない、hmLN内部で利用されている「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] )