直接對錶進行訪問與賦值
local vtbl = {}
local t = {}
--setmetatable(t, )
local t1 = os.clock()
for i = 1, 10000000, 1 do
t[1] = i
endlocal t2 = os.clock()
print(t2 - t1)
輸出結果:
>lua -e "io.stdout:setvbuf 'no'" "main.lua"
0.263
>exit code: 0
----------------------
通過設定元表為某table來實現訪問與賦值:
local vtbl = {}
local t = {}
setmetatable(t, )
local t1 = os.clock()
for i = 1, 10000000, 1 do
t[1] = i
endlocal t2 = os.clock()
print(t2 - t1)
輸出結果:
>lua -e "io.stdout:setvbuf 'no'" "main.lua"
0.435
>exit code: 0
可以看到,多了一層表的訪問,時間消耗增加一倍
通過設定元表為某函式來實現訪問與賦值:
local vtbl = {}
local t = {}
setmetatable(t, )
local t1 = os.clock()
for i = 1, 10000000, 1 do
t[1] = i
endlocal t2 = os.clock()
print(t2 - t1)
輸出結果:
>lua -e "io.stdout:setvbuf 'no'" "main.lua"
0.981
>exit code: 0
總結結果顯而易見,原方法為函式式寫法時,最後的開銷又增加了一倍,因為函式裡本身就又有對錶的訪問與賦值,而呼叫函式又需要開銷。
因此在設定元表時,如果僅僅只是把錶t的訪問或賦值轉嫁到另外乙個表vtbl中,建議採用:
setmetatable(t, )
而不建議採用:
setmetatable(t, )
比較順序表中元素與表頭元素
思路分析 首先設定乙個變數儲存表頭元素,再設定兩個變數儲存順序表第乙個元素和最後乙個元素,然後分別從兩端開始遍歷順序表的元素與表頭元素相比較,先從從j所儲存的元素開始,若比表頭元素小,則j 若比表頭元素大將j所儲存的元素附給當前i所儲存的元素,然後又從i開始比較,如此往復,直到i j.include...
LUA表轉殖方法歸納
將lua乙個表,轉殖出乙份為乙個獨立的另外乙個表。對於乙個module,如果在require之後,獲得的表物件,不能直接修改,例如lua快取此表,但是多次邏輯執行,都使用的是原始module,這種情況就需要使用clone。clone例項,例如將 轉殖出乙份 使用 tostring 列印兩個表,可以看...
Lua元表和元表方法
今天學習lua中的元表,書上講的太難懂了,網上搜尋教程也將的模模糊糊,搜了一會總結了一下經驗,跟大家分享一下,希望對您有所幫助。如何設定元表?local t local mt getmetatable t nil setmetatable t,mt 將t1設定為t的元表 getmetatable t...