2018年12月11日火曜日

WindowerのLuaは特殊バージョン

One thing to note is that we don't use stock Lua, but a slightly modified version. We use a superset of actual Lua 5.1, meaning everything that's valid Lua will also be valid for us, but additionally we support a few more things.
Windower Lua APIのページには上記の通り書かれている。Lua ver.5.1を改造したものを使っているとのこと。したがって、一般的なLua実行環境でWindower4\Addons\libs\Tables.luaとかWindower固有の機能を使わない基本的なスクリプトのテストをしようとしてもエラーがでてしまいテスト出来ない。

WindowerのLuaの独自拡張は、2点。

1. 単項プラス演算子の追加
print(+3)

2. 文法規則の変更
x = ('string: %s, number: %d'):format('foo', 42)
        ↓
x = 'string: %s, number: %d':format('foo', 42)
下段は一般的なLua実行環境ではエラーになるがWindowerのLuaでは実行可能。




それ以外にも違いがあった。Tables.luaの73行目
N = function()
 local nt = setmetatable({}, _meta.N)
 return function()
  return nt
 end
end()
最後の行「end()」は一般的なLua実行環境ではエラーになるがWindowerのLuaでは実行可能。もしかすると、「2.文法規則の変更」の範疇なのかもしれない。つまり、

  N = (function() ~end)()

ということか。無名関数を実行してその返り値をNに代入している。

0 件のコメント:

コメントを投稿