local variable_cache = S{}なんだこれ。。。
Luaにこんな文法があるのかと一生懸命WEB検索してもわからないw
結論からいうと、findAll.luaの37行目の
require('sets')
これが「S{}」を読み解くカギでした。requireで呼び出しているsets.luaはWindower4\addons\libs\sets.luaのこと。その中で
function S(t)
t = t or {}
if class(t) == 'Set' then
return t
endlocal s = {}if class(t) == 'List' then
for _, val in ipairs(t) do
s[val] = true
end
else
for _, val in pairs(t) do
s[val] = true
end
endreturn setmetatable(s, _meta.S)
end
このように「S」が定義されてます。つまり「S」は関数名でした。
そして、
local variable_cache = S{}
というのは
local variable_cache = S({})
の省略形です。関数にテーブルを1つだけ渡す場合、括弧()を省略できるというLuaのルールがあるそうです。
そして、このSには+とか-とかの演算子がsets.luaの中で定義されていて、集合(sets)どうしの足し算とか引き算とかができるようになっているというわけですね。
イメージ的には、こんなかんじ。
S{1,2,3}+S{4,5,6} → S{1,2,3,4,5,6}
集合Sと同じようにテーブルTもwindower4\addons\lib\tables.luaのなかで定義されています。
詳しくは下記URLを。
https://github.com/Windower/Lua/wiki/Writing-Addons#tables
0 件のコメント:
コメントを投稿