我遇到了这个Yaml文档:
--- !ruby/object:MyClass
myint: 100
mystring: hello world
行是什么?
--- !ruby/object:MyClass
是平均值?
答案 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,“ ---”表示文档的开头。