原因
由于lua的弱类型动态语言的特质,克隆table的行为在lua中不说无处不在,那也是非常常见。
一般克隆table原因无外乎:
- 通过修改旧table的部分数据创建新table,然后又不想由于修改新table而导致旧table被修改。从而保持函数的纯函数性。
方法
那怎么做到呢?有如下方法:
- 直接克隆。这种方式创建出来的table是全新的实例,怎么修改也不会影响到原table,缺点是在table较大的时候创建耗时较久,也会占用更多内存
function createNewTable(tb)
local newTb = clone(tb)
newTb.id = 2
return newTb
end
local tbA = {
a = 1}
local tbB = createNewTable(tbA)