在Yaml中使用---

时间:2018-10-31 22:23:55

标签: ruby yaml

我遇到了这个Yaml文档:

--- !ruby/object:MyClass
myint: 100
mystring: hello world

行是什么?

--- !ruby/object:MyClass

是平均值?

2 个答案:

答案 0 :(得分:2)

在YAML中,---是指令标记的结尾

YAML文档可以以许多YAML指令开头(当前定义了两个指令%YAML%TAG)。由于文本节点(例如)也可以以%字符开头,因此需要一种区分指令和文本的方法。这可以通过使用指令结尾标记---来实现,该标记指示指令的结尾和文档的开始。

由于伪指令允许为空,因此---也可以用作文档分隔符。

YAML还具有文档标记的结尾 ...。但是,这种用法并不经常使用,因为和指令的结尾标记/文件分隔符也暗示了文件的结尾。如果要在同一流中包含多个带有指令的文档,或者要指示一个文档完成而不必开始一个新文档,则需要它(例如,在一个文档的结尾之间可能要花费大量时间的情况下)和另一个的开始。

许多YAML发射器,并且Psych也不例外,总是在每个文档的开头发出指令结束标记。这样一来,您就可以轻松地将多个文档串联到单个流中,而无需对文档进行任何其他处理。

该行的另一半!ruby/object:MyClass标签。标记用于为以下节点提供类型。在YAML中,每个节点都有一个类型,即使它是隐式的也是如此。您还可以显式地编写标签,例如,文本节点的类型为(标签)!!str。在某些情况下,这可能很有用,例如:

!!str 2018-10-31

这告诉YAML 2018-10-31是文本,而不是日期。

!ruby/object:MyClass是Psych使用的标记,用于指示该节点是序列化的Ruby对象,它是类MyClass的实例。这样,在反序列化文档时,Psych就知道要实例化哪个类以及如何处理该节点。

答案 1 :(得分:1)

根据yaml.org,“ ---”表示文档的开头。

https://yaml.org/spec/1.2/spec.html 有关官方规范。