Pretty Print Table#
在 Python 中打印一个列表和字典默认就会递归打印里面所有的元素, 而 Lua 打印 table 时默认只打印它的 reference.
Method 1#
这里我们自己实现了一个递归打印的版本.
print_hash_table_1.lua
1function print_table(t, indent)
2 indent = indent or ""
3 for k, v in pairs(t) do
4 if type(v) == "table" then
5 print(indent .. tostring(k) .. ":")
6 print_table(v, indent .. " ")
7 else
8 print(indent .. tostring(k) .. ": " .. tostring(v))
9 end
10 end
11end
12
13local person = {
14 name = "John Doe",
15 age = 30,
16 hobbies = {"reading", "swimming"},
17 address = {
18 street = "123 Main St",
19 city = "Anytown"
20 },
21 children = {
22 alice = {
23 name = "Alice",
24 age = 5
25 },
26 bob = {
27 name = "Bob",
28 age = 8
29 }
30 }
31}
32print("==================== person ====================")
33print_table(person)
34
35local person_list = {
36 { name = "Alice", age = 30 },
37 { name = "Bob", age = 25 },
38 { name = "Charlie", age = 35 }
39}
40print("==================== person_list ====================")
41print_table(person_list)
[1]:
import subprocess
subprocess.run(["lua", "print_hash_table_1.lua"])
==================== person ====================
hobbies:
[1]:
CompletedProcess(args=['lua', 'print_hash_table_1.lua'], returncode=0)
1: reading
2: swimming
age: 30
children:
bob:
name: Bob
age: 8
alice:
name: Alice
age: 5
name: John Doe
address:
city: Anytown
street: 123 Main St
==================== person_list ====================
1:
name: Alice
age: 30
2:
name: Bob
age: 25
3:
name: Charlie
age: 35
Use serpent#
serpent 是 Lua 的一个库. 最新版本是 0.30.2. 我直接将源码下载下来并放在了 Lua 的搜索路径上.
print_hash_table_2.lua
1local serpent = require("serpent")
2
3local person = {
4 name = "John Doe",
5 age = 30,
6 hobbies = {"reading", "swimming"},
7 address = {
8 street = "123 Main St",
9 city = "Anytown"
10 },
11 children = {
12 alice = {
13 name = "Alice",
14 age = 5
15 },
16 bob = {
17 name = "Bob",
18 age = 8
19 }
20 }
21}
22print(serpent.block(person))
23
24local person_list = {
25 { name = "Alice", age = 30 },
26 { name = "Bob", age = 25 },
27 { name = "Charlie", age = 35 }
28}
29print(serpent.block(person_list))
[2]:
import subprocess
subprocess.run(["lua", "print_hash_table_2.lua"])
{
address = {
city = "Anytown",
street = "123 Main St"
} --[[table: 0x6000024f5080]],
age = 30,
children = {
alice = {
age = 5,
name = "Alice"
} --[[table: 0x6000024f5100]],
bob = {
age = 8,
name = "Bob"
} --[[table: 0x6000024f5140]]
} --[[table: 0x6000024f50c0]],
hobbies = {
"reading",
"swimming"
} --[[table: 0x6000024f5040]],
name = "John Doe"
} --[[table: 0x6000024f5000]]
{
{
age = 30,
name = "Alice"
} --[[table: 0x6000024f4d80]],
{
age = 25,
name = "Bob"
} --[[table: 0x6000024f4f40]],
{
age = 35,
name = "Charlie"
} --[[table: 0x6000024f4f80]]
} --[[table: 0x6000024f54c0]]
[2]:
CompletedProcess(args=['lua', 'print_hash_table_2.lua'], returncode=0)
[ ]: