模組 Psych::Nodes
概觀¶ ↑
使用 Psych.load
對 YAML
文件進行反序列化時,文件會轉換成中間 AST。然後,中間 AST 會轉換成 Ruby 物件圖形。
相反地,使用 Psych.dump
時,Ruby 物件圖形會轉換成中間 AST,然後轉換成 YAML
文件。
Psych::Nodes
包含構成 YAML
AST 節點的所有類別。您可以手動建立 AST,並使用其中一個訪客(請參閱 Psych::Visitors
)將該 AST 轉換成 YAML
文件或 Ruby 物件圖形。
以下是建立表示清單(包含一個純量)的 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
都是終端節點,不應有任何子節點。