Skip to content

在配置中设置数据

在本章节,我们会讲述数据在配置内读写的基本方式。因为 Terra 配置支持多种语言,我们在章节中使用的术语可能会有所差异。

提示

如果你已经熟悉了数据结构及数据序列化语言,那么可以跳过并阅读下一部分。

类型

数据类型是需要理解的主要概念之一。它能:

  • 表示如何定义数据
  • 数据应该包含什么
  • 数据应该如何使用

正常情况下,数据类型一眼便知,但有时你还是需要告诉 Terra 使用哪种类型的数据。

配置中设置的一段数据称为“对象”。所有对象都可通过类型分类,而配置则可以决定其数据类型。配置文件总会先设定一个对象。

整数

若要使用这类数据,首先以 YAML 格式创建一个配置文件。在本示例中我们会用 Integer

整数即没有小数部分的数,其写法如下所示:

现在,我们就创建了一个定义了整数 Integer 的配置,其值为 42

浮点数

与整数略有不同的即为浮点数(Float)。它与整数的区别在于它包含了小数:

大多数情况下,我们需要区别整数与浮点数的区别,因为我们并不总是以小数标注一切数字,所以将这两种数分为两类还是有必要的。通常,需要整数的配置项不可以填入浮点数,但要求浮点数的配置项可以填入整数。

布尔值

布尔值(Boolean)表示数据只有两种状态。一般情况下这个数据用在那些“开关”状态的配置下,只能填入 truefalse,如下所示:

字符串

我们也可以将文本当做数据,即字符串(String):

字符串适合用来表示命名,且广泛运用——例如,在生物群系中指定需要生成的方块 ID。

在部分情况下你可能需要将字符串当做布尔值使用。若要强制将数据作为字符串,你可以使用引号将其包裹:

映射表

单独的整数、浮点数以及字符串都没有太大的作用,直到我们将其组合并带上“标签”。这样的数据类型即映射表(Map)。

  • 映射表是一系列对象的集合
  • 集合内的对象称作
  • 另一个标注对象的“标签”即为

如下为映射表类型的配置,键与值的类型都是字符串:

映射表是对象的集合,因此我们可以在其中填入多对键值,如下所示:

就像上文所说,因为配置文本只能有一个主对象,因此这会非常实用。我们可以在映射表内填入多个对象,还能通过各自的标签快速找到它们。

每个在映射表里的键都不可以重复,因此如下的设置是无效的:

顺序

键值对的顺序并不重要,你可以在配置中任意排列它们。

如下的两段配置效果相同:

列表

除了地图自带,我们也可以通过列表(List)设定一个对象列表。与映射表不同的是,列表中的元素(列表中的对象)没有键,通过其位置区别。正因如此,列表内元素的顺序会影响结果

如下为列表的示例配置,包含多个字符串:

联结对象

映射表与列表中的值可以是任意类型,因此可以将其任意组合。

提示

这样的嵌套式定义即为“联结”。

两值一键的错误定义方式

YAML 中有一个非常容易犯的错误,即为同一键分配两个不同的值。

如下所示的错误配置:

YAML
key: foo
  baz: bar

这里,为 key 分配了两个值,其一为 foo,其二为 baz: bar 的映射表。

将其中一个删除即可恢复正常:

YAML
key:
  bar: bar

或者

YAML
key: foo

配置可能在各种情况下出现类似的配置错误。

有些键会被删除或省略,可以将其加回去,如下所示:

YAML
key: foo
缺失的键:
  baz: bar

你可能会搞错某些值的缩进,如上的错误配置可以将其改为这样,从而恢复正常:

YAML
key: foo
baz: bar

组合

我们将这些不同的类型组合起来,用以表示复杂的数据结构,如下为一个购物清单和待办事项的示例,用到了我们上述讲过的大部分数据结构:

在这个例子中,配置文本的类型是映射表,包含了 shopping-listappointments 两个键。它们的值是一个列表,其中的元素是映射表。

独有格式

部分数据序列化语言支持一些额外的格式,用于表达重复的值。在 YAML 中你可以通过花括号 {} 与方括号 [] 表示映射表与列表,通过英文逗号 , 分隔不同的元素。在需要将其表述为一行内容时非常有用:

config.yml
YAML
curly-brace-map: {
  "key-1": "value-1",
  "key-2": "value-2"
}

square-bracket-list: [
  item-1,
  item-2,
  item-3
]

single-line-map: { "key-1": "value-1", "key-2": "value-2" }

single-line-list: [ item-1, item-2, item-3 ]

empty-map: {}

empty-list: []

YAML 锚点

YAML 也提供了诸如锚点的额外功能,允许你在配置内复用其他数据,如果需要在配置中填入重复数据,这就是最好的选择。

YAML
数据列表: &锚点
  - 元素甲
  - 元素乙

复用数据处: *锚点

通过 YAML 语言拓展判断时,复用数据处 的值与 数据列表 相同。

贡献者

页面历史