Psych::Handler 类
Psych::Handler 是一个抽象基类,它定义了与 Psych::Parser 交互时使用的事件。想要使用 Psych::Parser 的客户端应该实现一个继承自 Psych::Handler 的类,并定义他们可以处理的事件。
Psych::Handler 定义了 Psych::Parser 可能发送给事件处理器的所有事件。
有关更多详细信息,请参阅 Psych::Parser
Constants
- 事件
-
Handler应该响应的事件。 - 选项
-
默认转储选项
Public Instance Methods
Source
# File ext/psych/lib/psych/handler.rb, line 110 def alias anchor end
找到别名指向 anchor 时调用。anchor 将是找到的别名名称。
示例
这里有一个在 YAML 中引用自身的数组的示例
--- &ponies - first element - *ponies
&ponies 是锚点,*ponies 是别名。在这种情况下,别名会用“ponies”调用。
Source
# File ext/psych/lib/psych/handler.rb, line 236 def empty end
发生空事件时调用。(据我所知,这种情况从未发生过)。
Source
# File ext/psych/lib/psych/handler.rb, line 93 def end_document implicit end
文档结束时调用。implicit 是一个布尔值,指示文档是否有隐式结尾。
示例
给定以下 YAML
--- hello world
implicit 将为 true。给定以下 YAML
--- hello world ...
implicit 将为 false。
Source
# File ext/psych/lib/psych/handler.rb, line 191 def end_sequence end
序列结束时调用。
Source
# File ext/psych/lib/psych/handler.rb, line 246 def event_location(start_line, start_column, end_line, end_column) end
在每个事件之前调用,并提供行/列信息。
Source
# File ext/psych/lib/psych/handler.rb, line 150 def scalar value, anchor, tag, plain, quoted, style end
找到标量 value 时调用。标量可能具有 anchor、tag,隐式地是 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 ]
Source
# File ext/psych/lib/psych/handler.rb, line 72 def start_document version, tag_directives, implicit end
当文档开始时调用,带有所声明的 version、tag_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
Source
# File ext/psych/lib/psych/handler.rb, line 225 def start_mapping anchor, tag, implicit, style end
映射开始时调用。
anchor 是与映射关联的锚点或 nil。tag 是与映射关联的标签或 nil。implicit 是一个布尔值,指示映射是否隐式开始。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 ]
Source
# File ext/psych/lib/psych/handler.rb, line 186 def start_sequence anchor, tag, implicit, style end
序列开始时调用。
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 ]
Source
# File ext/psych/lib/psych/handler.rb, line 47 def start_stream encoding end
在 YAML 流开始时,使用 encoding 调用。此方法每个流调用一次。一个流可能包含多个文档。
有关 encoding 可能值的详细信息,请参阅 Psych::Parser 中的常量。
Source
# File ext/psych/lib/psych/handler.rb, line 251 def streaming? false end
此处理程序是流式处理程序吗?