1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
	--保存table   保存带有循环的table
function basicSerialize (o)
if type(o) == "number" then
return tostring(o)
else -- assume it is a string
return string.format("%q", o)
end
end


function save (name, value, saved)
saved = saved or {} -- initial value
io.write(name, " = ")
if type(value) == "number" or type(value) == "string" then
io.write(basicSerialize(value), "/n")
elseif type(value) == "table" then
if saved[value] then -- value already saved?
-- use its previous name
io.write(saved[value], "/n")
else
saved[value] = name -- save name for next time
io.write("{}/n") -- create a new table
for k,v in pairs(value) do -- save its fields
local fieldname = string.format("%s[%s]", name,
basicSerialize(k))
save(fieldname, v, saved)
end
end
else
error("cannot save a " .. type(value))
end
end

save('s',{a=12, b='Lua', key='another "one"'})
print("--保存带有循环的table")
a = {x=1, y=2; {3,4,5}}
a[2] = a -- cycle
a.z = a[1] -- shared sub-table
save('a',a);
print("--保存带有共享部分的表")
a = {{"one", "two"}, 3}
b = {k = a[1]}
save('a', a)
save('b', b)
print("--使用同一个saved表来调用save函数/n--结果将共享相同部分");
local t = {}
save('a', a, t)
save('b', b, t)

--似懂非懂....
--上面这种方法是Lua中常用的方法,当然也有其他一些方法可以解决问题。
--比如,我们可以不使用全局变量名来保存,即使用封包,用chunk构造一个local值然后返回之;
--通过构造一张表,每张表名与其对应的函数对应起来等。
--Lua给予你权力,由你决定如何实现。
感谢您的阅读,本文由 smallwhite's Blog 版权所有。如若转载,请注明出处:smallwhite's Blog(https://smallwhite.ml/pub/uncategorized/bao-cun-table.html
Lua语言中pairs和ipairs的区别
协同程序 过滤器