將lua乙個表, 轉殖出乙份為乙個獨立的另外乙個表。
對於乙個module, 如果在require之後,獲得的表物件, 不能直接修改, 例如lua快取此表, 但是多次邏輯執行, 都使用的是原始module,
這種情況就需要使用clone。
clone例項, 例如將 轉殖出乙份 ,
使用 tostring 列印兩個表,可以看到位址不同。
深拷貝, 即當遇到表的key或者value也是表的時候, 將表也拷貝乙份, 否則不拷貝, 否則的方法為淺拷貝。
對於一般資料型別 , 例如 字串 和 數字 和 布林值, 都是深拷貝, 拷貝後獨立乙份。
luaci給的方法
---------------------
--- clones the given object and return it's copy.
--@param object table value to clone
--@param deep boolean indicating whether to do recursive cloning
--@return cloned table value
function
clone(object, deep)
local copy ={}
for k, v in
pairs(object) do
if deep and
type(v) == "
table
"then
v =clone(v, deep)
endcopy[k] =v
endreturn
setmetatable(copy, getmetatable
(object))
end
這個是不希望的。
例如 a = , b=
乙個開源軟體平台給出類解法
-[[function: cocos2dx_clone
description: lua表轉殖介面,cocos2dx專案開源提供。拷貝策略:深拷貝。
網路解釋見 :
parm: object(object): 待拷貝的lua物件。
return: 拷貝過的lua物件。
]]function
cocos2dx_clone(object)
local lookup_table ={}
local
function
_copy
(object)
iftype(object) ~= "
table
"then
return
object
elseif lookup_table[object] then
return
lookup_table[object]
endlocal new_table ={}
lookup_table[object] =new_table
for key, value in
pairs(object) do
new_table[
_copy(key)] = _copy
(value)
print(key,value)--
這句新增print函式 演示輸出複製的過程
endreturn
setmetatable(new_table, getmetatable
(object))
endreturn
_copy(object)--
返回clone出來的object表指標/位址
end
Lua元表和元表方法
今天學習lua中的元表,書上講的太難懂了,網上搜尋教程也將的模模糊糊,搜了一會總結了一下經驗,跟大家分享一下,希望對您有所幫助。如何設定元表?local t local mt getmetatable t nil setmetatable t,mt 將t1設定為t的元表 getmetatable t...
lua中元表方法速度比較
直接對錶進行訪問與賦值 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 setv...
Lua 元表以及元方法
例如 a 10b 20print a b 我們可以得到30,但是如果兩個table型別相加呢?a b print a b 輸出結果是 lua hello world.lua 3 attempt to perform arithmetic on global a a table value stack...