Lua程式設計(三十九)

2021-09-09 09:15:06 字數 1433 閱讀 4337

假設有乙個用表來表示集合的模組。該模組還有一些用來計算集合並集和交集等的函式。

local set = {}

function set.new (l)

local set = {}

for _, v in ipairs(l) do set[v] = true end

return 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.interaction (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] = tostring(e)

endreturn ""

endreturn set

現在,如果我們要使用假髮操作符來計算兩個集合的並集,那麼可以讓所有表示集合的表共享乙個元表。這個元表定義了這些表應該如何執行相應的操作。

local mt = {}

function set.new (l)

local set = {}

setmetatable(set, mt)

for_, v in ipairs(l) do set[v] = true end

return set

end

在此之後,所有有set.new建立的集合都具有了乙個相同的元表:

s1 = set.new

s2 = set.new

print(getmetatable(s1)) -->0x00672860

print(getmetatable(s2)) -->0x00672860

每種算術運算子都有乙個對應的元方法。除了加法和乘法外,還有減法(__sub)、除法(__div)、floor除法(__idiv)、負數、取模和冪運算等等。

當乙個表示式中的混合了兩種具有不同元表的值時,lua語言會用以下步驟來查詢元方法:如果第乙個值有元表且元表中存在所需的元方法,那麼lua語言就是用這個元方法,與第二個值無關;如果第二個值有元表且元表中存在所需的元方法;否則,lua語言就丟擲異常。

隨筆(三十九)

android popupwindow背景半透明相容方案 2.android tint 使用 3.android繪製乙個三角形並且可動態改變顏色 4.android lrecyclerview實現下拉重新整理,滑動到底部自動載入更多 5.在listview的item發生變化的時候 初始化 notif...

GNU make manual 翻譯 三十九

繼續翻譯 3.3 including other makefiles the include directive tells make to suspend reading the current makefile and read one or more other makefiles befor...

osg學習(三十九)DisplaySettings

displaysettings是osg的全域性單例項變數,類似osg的registry。主要記錄視窗的一些顯示設定,比如視窗尺寸 多重紋理取樣數等,osg在建立視窗時會從該變數中讀取資訊,這個變數中的資訊可以通過命令列輸入也可以通過環境變數輸入,但是不支援通過 修改 也可以通過如下方式設定 這個設定...