- 追加された行はこの色です。
- 削除された行はこの色です。
*Luaリファレンス 要注意点 ~演算子オーバロード、メタメソッド~ [#k63bd971]
*演算子オーバーロード [#k6a9b938]
>pythonと同じ方針。メタメソッドに他の一般メソッドの参照を代入する
#sh(lua){{
#sh(lua;highlight:[23]){{
Set = {}
local _mtSet = {} --> メタテーブル用
function Set.new (l)
local set = {}
setmetatable(set, _mtSet) --> newで必ず、テーブルに対してメタテーブルが用意されるようにする。
setmetatable(set, _mtSet) --> テーブルに対してメタテーブルが用意されるようにする。
for _, v in ipairs(l) do set[v] = true end
return set
end
function Set.union(a, b)
local res = Set.new{}
for k in pairs(a) do res[k] = true end
for k in pairs(b) do res[k] = true end
return res
end
s1 = Set.new{10, 20, 30, 50}
s2 = Set.new{30, 1, 60}
print(getmetatable(s1)) --> table : 00000000xxxxx1
print(getmetatable(s2)) --> table : 00000000xxxxx2
_mtSet.__add = Set.union --> メタテーブル __add に代入する(ことで、「+」の振る舞いを変える
s3 = s1 + s2 --->s3 = Set.union(s1, s2) --> {1,10,20,30,50, 60}
}}