考慮下面的代碼:如何在Lua對象中創建一個類表成員?
#!/usr/bin/lua
local field =
{
name = '',
array = {},
new = function(self, o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end,
}
local fld1 = field:new()
local fld2 = field:new()
fld1.name = 'hello'
table.insert(fld1.array, 1)
table.insert(fld1.array, 2)
table.insert(fld1.array, 3)
fld2.name = 'me'
table.insert(fld2.array, 4)
table.insert(fld2.array, 5)
print('fld1: name='..fld1.name..' len='..#fld1.array)
print('fld2: name='..fld2.name..' len='..#fld2.array)
執行時的輸出如下所示:
fld1: name=hello len=5
fld2: name=me len=5
從輸出中,可以看出的是name
具有fld1
和fld2
不同的值。然而,array
在fld1
和fld2
(fld1.array
和fld2.array
是相同的,因此具有相同的長度5)具有相同的值。
如何修復此代碼,使fld1.array
獨立於fld2.array
(以便修改fld1.array
不會改變fld2.array
)?