1.算術類的原方法
下面是乙個關於交集和並集的例子
set = {}
--根據引數列表中的值建立乙個新的集合
function set.new(l)
local set = {}
for _, v in ipairs(l) do
set[v] = true
endreturn set
endfunction 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
endfunction set.intersection(a,b)
local res = set.new{}
for k in pairs(a) do
res[k] = b[k]
endreturn res
endfunction set.tostring(set)
local l = {} --用於存放集合中所有元素的列表
for e in pairs(set) do
l[#l +1] = e
endreturn ""
endfunction set.print(s)
print(set.tostring(s))
endmt.__add = set.union
這樣,只要lua試圖將兩個集合相加,它就會呼叫set.union函式,並將兩個運算元作為引數傳入。可以使用加號來求集合的並集
s1 = set.new
s2 = set.new
s3 = s1+s2
set.print(s3) -->
類似的,還可以使用乘號來求集合的交集
mt.__mul = set.intersection
set.print((s1+s2)*s1) -->
元表中的數字操作符:
__sub(減法),__div(除法),__unm(相反數),__mod(取模),__pow(乘冪),__concat(連線)
2.關係類的元方法
元表還可以指定關係操作符的含義,元方法為__eq(等於),__lt(小於),__le(小於等於)
mt.__le = function(a,b)
for k in pairs(a) do
if not b[k] then return false end
endreturn true
endmt.__lt = function(a,b)
return a<=b and not (b<=a)
endmt.__eq = function(a,b)
return a<=b and b<=a
end與算術類的元方法不同的是,關係類的元方法不能應用於混合型別
lua算術運算和關係運算metamethods
說明1.以下使用的metamethod都是lua核心metamethod,使用的時候可以採用相應的操作符,如 add可以解釋成 2.metamethod需要放在metatable中使用 算術運算子對應的域 add sub mul div unm 負 pow 冪 關係運算子對應的域 eq lt le ...
lua 算術運算子對應的元方法
pow 冪運算 band 按位與 bor 按位或 bxor 按位異或 bnot 按位取反 shl 向左移位 shr 向右移位 len 取長度 此外還有 tostring 可以影響對這個型別的數值的print結果。不過一般我們都是給表或者自定義型別設定元表和元方法,其實其他型別值也可以,不過得通過c ...
類和類之間的關係
在uml中,類和類之間有實現 介面 繼承等等。下面重點講下下面四個的區別 一般來講,關聯是指一種一對一的關係。注意,在關聯中,關聯物件擁有被關聯類 以箭頭指向來說 水平的引用 class asset class player set the asset via constructor or a se...