类 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 psych/lib/psych/handler.rb, line 110
def alias anchor
end
empty() 点击以切换源代码

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

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

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

示例

给定以下 YAML

---
  hello world

implicit 将为真。给定此 YAML

---
  hello world
...

implicit 将为假。

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

当映射结束时调用。

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

当序列结束时调用。

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

当 YAML 流结束时调用。

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

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

# File 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 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 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 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 psych/lib/psych/handler.rb, line 186
def start_sequence anchor, tag, implicit, style
end
start_stream(encoding) 点击切换源代码

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

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

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

此处理程序是否为流处理程序?

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