YAML (Ruby) 将“on”加载为 true

Geo*_*ath 4 ruby yaml

我正在尝试从 YAML 文件加载单词列表。文件中有一个条目

- on
Run Code Online (Sandbox Code Playgroud)

Ruby 将其加载为“true”,而不是“on”。类似地,“off”被加载为“false”。对 Psych 代码的快速检查显示“是”和“否”的处理方式相同。

除了在开关上添加引号之外,还有什么方法可以改变这种行为?

如果我读取文件并解析,而不是加载文件,我就可以看到这些值。

# test.yaml
- true
- false
- yes
- no
- on
- off
- y
- n
- Y
- N
Run Code Online (Sandbox Code Playgroud)

我通过解析而不是加载来获取 Psych 文档,其中包含转换为本机之前的文本。

YAML.parse_file('test.yaml')
Run Code Online (Sandbox Code Playgroud)

想知道如何正确提取它。

来自文档

“表示阶段是指已组成 YAML::BaseNode 对象的数据。在此阶段,文档可用作节点对象树。您可以在此级别执行 YPath 查询和转换。(请参阅 YAML::parse。 )”

需要有关编写全面的 YPath 查询来提取数据的帮助。

(PS:这可能看起来有点迂回,但这为我清理了数据管理中的很多东西)

小智 5

它列在 YAML参考卡上,尽管我在规范中找不到任何对它的引用。

与语言无关的标量类型:
   ...
    { Y, true, Yes, ON } : 布尔值 true
    { n, FALSE, No, off } : 布尔值 false
   ...

我认为报价是你唯一的选择。