LUA表轉殖方法歸納

2022-03-31 08:14:47 字數 1835 閱讀 1950

將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...