本文简要介绍ruby语言中 Psych::Nodes模块
的用法。
概述
当使用 Psych.load
反序列化 YAML
文档时,该文档被转换为中间 AST。然后将该中间 AST 转换为 Ruby 对象图。
在相反的方向上,当使用 Psych.dump
时,Ruby 对象图被转换为中间 AST,然后转换为 YAML
文档。
Psych::Nodes
包含构成 YAML
AST 节点的所有类。您可以手动构建 AST 并使用其中一个访问者(请参阅 Psych::Visitors
)将该 AST 转换为 YAML
文档或 Ruby 对象图。
下面是一个构建 AST 的示例,该 AST 表示具有一个标量的列表:
# Create our nodes
stream = Psych::Nodes::Stream.new
doc = Psych::Nodes::Document.new
seq = Psych::Nodes::Sequence.new
scalar = Psych::Nodes::Scalar.new('foo')
# Build up our tree
stream.children << doc
doc.children << seq
seq.children << scalar
流是树的根。然后我们可以将树转换为 YAML:
stream.to_yaml => "---\n- foo\n"
或者将其转换为 Ruby:
stream.to_ruby => [["foo"]]
YAML
AST 要求
一个有效的 YAML
AST 必须在根中有一个 Psych::Nodes::Stream
。 Psych::Nodes::Stream
节点必须有 1 个或多个 Psych::Nodes::Document
节点作为子节点。
Psych::Nodes::Document
节点必须有一个且只有一个子节点。那个孩子可能是以下之一:
Psych::Nodes::Sequence
和 Psych::Nodes::Mapping
节点可能有很多子节点,但 Psych::Nodes::Mapping
节点应该有偶数个子节点。
所有这些都是 Psych::Nodes::Sequence
和 Psych::Nodes::Mapping
节点的有效子节点:
Psych::Nodes::Scalar
和 Psych::Nodes::Alias
都是终端节点,不应有任何子节点。
相关用法
- Ruby Node.type用法及代码示例
- Ruby NotifyTemplateEntry类用法及代码示例
- Ruby NoMethodError类用法及代码示例
- Ruby NilClass.to_f用法及代码示例
- Ruby NilClass.to_d用法及代码示例
- Ruby NilClass.to_a用法及代码示例
- Ruby NilClass.to_h用法及代码示例
- Ruby NilClass.to_i用法及代码示例
- Ruby Numeric truncate()用法及代码示例
- Ruby Numeric rect()用法及代码示例
- Ruby Name.subdomain_of?用法及代码示例
- Ruby Numeric.i用法及代码示例
- Ruby Numeric angle()用法及代码示例
- Ruby Numeric phase()用法及代码示例
- Ruby Name.new用法及代码示例
- Ruby Numeric div()用法及代码示例
- Ruby Numeric integer()用法及代码示例
- Ruby Numeric positive?用法及代码示例
- Ruby Numeric.eql?用法及代码示例
- Ruby Numeric conjugate()用法及代码示例
- Ruby Numeric finite?()用法及代码示例
- Ruby Numeric abs()用法及代码示例
- Ruby Numeric remainder()用法及代码示例
- Ruby Numeric.coerce用法及代码示例
- Ruby Numeric ceil()用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Nodes模块。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。