类 Psych::Handler

Psych::Handler 是一个抽象基类,定义了处理 Psych::Parser 时使用的事件。想要使用 Psych::Parser 的客户端应该实现一个继承自 Psych::Handler 的类,并定义他们可以处理的事件。

Psych::Handler 定义了 Psych::Parser 可能发送给事件处理程序的所有事件。

有关更多详细信息,请参阅 Psych::Parser

常量

EVENTS

Handler 应该响应的事件。

OPTIONS

默认转储选项

公共实例方法

alias(anchor) 点击以切换源代码

当找到指向 anchor 的别名时调用。anchor 将是找到的锚点的名称。

示例

这里我们有一个在 YAML 中引用自身的数组示例

--- &ponies
- first element
- *ponies

&ponies 是锚点,*ponies 是别名。在这种情况下,alias 被调用为“ponies”。

# File ext/psych/lib/psych/handler.rb, line 110
def alias anchor
end
empty() 点击以切换源代码

当发生空事件时调用。(据我所知,这种情况从未发生过)。

# File ext/psych/lib/psych/handler.rb, line 236
def empty
end
end_document(implicit) 点击以切换源代码

在文档结束时调用。implicit 是一个布尔值,指示文档是否具有隐式结束。

示例

给定以下 YAML

---
  hello world

implicit 将为 true。给定此 YAML

---
  hello world
...

implicit 将为 false。

# File ext/psych/lib/psych/handler.rb, line 93
def end_document implicit
end
end_mapping() 点击以切换源代码

在映射结束时调用

# File ext/psych/lib/psych/handler.rb, line 230
def end_mapping
end
end_sequence() 点击切换源代码

当序列结束时调用。

# File ext/psych/lib/psych/handler.rb, line 191
def end_sequence
end
end_stream() 点击切换源代码

YAML 流结束时调用。

# File ext/psych/lib/psych/handler.rb, line 241
def end_stream
end
event_location(start_line, start_column, end_line, end_column) 点击切换源代码

在每个事件之前调用,并提供行/列信息。

# File ext/psych/lib/psych/handler.rb, line 246
def event_location(start_line, start_column, end_line, end_column)
end
scalar(value, anchor, tag, plain, quoted, style) 点击切换源代码

当找到一个标量 value 时调用。标量可能具有 anchortag,并且可能是隐式 plain 或隐式 quoted

value 是标量的字符串值 anchor 是关联的锚点或 nil tag 是关联的标签或 nil plain 是布尔值 quoted 是布尔值 style 是一个整数,表示字符串样式

有关 style 的可能值,请参见 Psych::Nodes::Scalar 中的常量。

示例

以下是一个 YAML 文档,它演示了此方法可以被调用的大多数可能方式。

---
- !str "foo"
- &anchor fun
- many
  lines
- |
  many
  newlines

上面的 YAML 文档包含一个包含四个字符串的列表。以下是按相同顺序发送给此方法的参数。

# value               anchor    tag     plain   quoted  style
["foo",               nil,      "!str", false,  false,  3    ]
["fun",               "anchor", nil,    true,   false,  1    ]
["many lines",        nil,      nil,    true,   false,  1    ]
["many\nnewlines\n",  nil,      nil,    false,  true,   4    ]
# File ext/psych/lib/psych/handler.rb, line 150
def scalar value, anchor, tag, plain, quoted, style
end
start_document(version, tag_directives, implicit) 点击切换源代码

当文档以声明的 versiontag_directives(如果文档是 implicit)开始时调用。

version 将是一个整数数组,表示正在处理的 YAML 版本,tag_directives 是一个元组列表,表示每个标签的前缀和后缀,implicit 是一个布尔值,表示文档是否以隐式方式开始。

示例

给定以下 YAML

%YAML 1.1
%TAG ! tag:tenderlovemaking.com,2009:
--- !squee

用于 start_document 的参数必须是这些。

version         # => [1, 1]
tag_directives  # => [["!", "tag:tenderlovemaking.com,2009:"]]
implicit        # => false
# File ext/psych/lib/psych/handler.rb, line 72
def start_document version, tag_directives, implicit
end
start_mapping(anchor, tag, implicit, style) 点击切换源代码

当映射开始时调用。

anchor 是与映射关联的锚点,或 niltag 是与映射关联的标签,或 nilimplicit 是一个布尔值,指示映射是否隐式开始。style 是一个整数,指示映射样式。

有关 style 的可能值,请参见 Psych::Nodes::Mapping 中的常量。

示例

以下是一个 YAML 文档,它演示了此方法可以被调用的大多数可能方式。

---
k: !!map { hello: world }
v: &pewpew
  hello: world

上面的 YAML 文档包含三个映射,一个包含两个内部映射的外部映射。以下是用来表示这三个映射的参数矩阵

# anchor    tag                       implicit  style
[nil,       nil,                      true,     1     ]
[nil,       "tag:yaml.org,2002:map",  false,    2     ]
["pewpew",  nil,                      true,     1     ]
# File ext/psych/lib/psych/handler.rb, line 225
def start_mapping anchor, tag, implicit, style
end
start_sequence(anchor, tag, implicit, style) 点击切换源代码

当序列开始时调用。

anchor 是与序列关联的锚点,或 nil。tag 是与序列关联的标签,或 nil。implicit 是一个布尔值,指示序列是否隐式开始。style 是一个整数,指示列表样式。

有关 style 的可能值,请参见 Psych::Nodes::Sequence 中的常量。

示例

以下是一个 YAML 文档,它演示了此方法可以被调用的大多数可能方式。

---
- !!seq [
  a
]
- &pewpew
  - b

上面的 YAML 文档包含三个列表,一个包含两个内部列表的外部列表。以下是用来表示这些列表的参数矩阵

# anchor    tag                       implicit  style
[nil,       nil,                      true,     1     ]
[nil,       "tag:yaml.org,2002:seq",  false,    2     ]
["pewpew",  nil,                      true,     1     ]
# File ext/psych/lib/psych/handler.rb, line 186
def start_sequence anchor, tag, implicit, style
end
start_stream(encoding) 点击切换源代码

YAML 流开始时,使用 encoding 调用。此方法在每个流中调用一次。一个流可能包含多个文档。

有关 encoding 的可能值,请参见 Psych::Parser 中的常量。

# File ext/psych/lib/psych/handler.rb, line 47
def start_stream encoding
end
streaming?() 点击切换源代码

此处理程序是流处理程序吗?

# File ext/psych/lib/psych/handler.rb, line 251
def streaming?
  false
end