-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathDescription.toml
77 lines (72 loc) · 2.62 KB
/
Description.toml
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 这是一个用 TOML 格式书写的 readme, 用于理解 tom-toml 的实现方法.
# 开头的这几行注释被命名为多行注释, MultiComments, 保存在 Value struct 中
keyName = "string value" # 这是行尾注释, eolComment, 保存在 Value struct 中
# 对于上面的内容在 tom-toml 中会生成一个 Value, 下面用伪代码进行描述
# Value {
# MultiComments: "第1行和第2行的内容,包括行首的 # 字符",
# eolComment: "第4行的行尾注释,包括 # 字符",
# kind: String,
# v: interface{}{"string value"},
# }
# 可以看到 v 中保存了值部分. 虽然 Value struct 中也 key 的定义,
# 但它的目是为格式化输出做准备的, 不是用来保存最原始的 keyName.
# 因为 Toml 的定义是 map[string]*Item, 实际操作中使用者可能会:
# delete(m, "keyName")
# m["kenName"] = GenItem
# 也就是说 keyName 是作为 key 保存在 map 中.
# 因此使用者需要理解 tom-toml 对 key/value 的管理方式.
# 另外, MultiComments 总是附加于紧随其后的 TOML 定义
[tableName] # 第6至20行的注释会当作 tableName 的 MultiComments.
Int = 123456789
Float = 0.12
IntArray = [ # 行尾注释1
# 多行注释1
1,
2, # 行尾注释2
] # 行尾注释3
# 用伪代码描述上面的内容得到的 Toml 对象:
# map[string]*Item{ // Item 扩展自 Value
# "keyName": &Item{..这里省略, 见前面的描述..},
# "tableName": &Item{
# MultiComments: "第6至20行的内容,包括行首的 # 字符",
# eolComment: "第22行的行尾注释,包括 # 字符",
# kind: Table,
# v: interface{}{nil}, // 注意这里
# },
# "tableName.Int": &Item{
# MultiComments: "",
# eolComment: "",
# kind: Interger,
# v: interface{}{123456789},
# },
# "tableName.Float": &Item{
# MultiComments: "",
# eolComment: "",
# kind: Float,
# v: interface{}{0.12},
# },
# "tableName.IntArray": &Item{
# MultiComments: "",
# eolComment: "# 行尾注释3", // 注意这里,"# 行尾注释1" 被覆盖掉了
# kind: IntegerArray,
# v: []*Value{
# &Value{
# MultiComments: "# 多行注释1",
# eolComment: "",
# kind: Integer,
# v: interface{}{1},
# },
# &Value{
# MultiComments: "",
# eolComment: "# 行尾注释2",
# kind: Integer,
# v: interface{}{2},
# },
# },
# },
# }
# 可以看到 key/value 是分开保存的. 注意行尾注释有可能有多种方法.
# 因此访问 toml["tableName"] 只会得到一个 key.
# 如果要得到整个 tableName 段集合, 需要使用
# toml.Fetch("tableName")
# 从第32行开始的这些注释,被称作 LastComments, 作为特例使用 "" 作为key, 保存到 Toml 的map中.