當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Ruby Nodes模塊用法及代碼示例

本文簡要介紹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-lang.org大神的英文原創作品 Nodes模塊。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。