ruby - 为什么以空格开头的字符串转换为 : ! ' 与 Ruby/YAML

标签 ruby yaml

我正在使用 YAML 将 Ruby 哈希写入文件。

File.open(output_file, "w") {|file| file.puts YAML::dump(final)}

哈希包含作为键的字符串和作为值的 float 。

当我的字符串只包含字母时,它们会在文件 file 中原样输出:

abc: 1.0
bcd: 1.0
cde: 1.0

当一个字符串以空格开头时,它是这样输出的:

! ' ab': 1.0

当我再次读回文件时一切正常,但我想知道为什么会这样,这意味着什么。

我搜索了 YAML 文档,它说单个感叹号用于表示本地数据类型。

为什么以空格开头的字符串会出现这种情况?

最佳答案

! is known as the "non-specific tag" .它强制 YAML 引擎将以下项目解码为字符串、散列或数组。它基本上禁止将其解释为不同的类型。我不确定为什么引擎会这样标记它们;似乎不需要。也许它只是过分热心地试图消除歧义?

编辑:无论哪种方式,它都是不需要的语法:

YAML.dump({' a'=>0})
=> "---\n! ' a': 0\n"
YAML.load("---\n! ' a': 0\n") # with the bang
=> {" a"=>0}
YAML.load("---\n' a': 0\n")   # without the bang
=> {" a"=>0}

关于ruby - 为什么以空格开头的字符串转换为 : ! ' 与 Ruby/YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791097/

相关文章:

ruby - pubnub 发布不发布

ruby - 'private' 以它在 Ruby 中的方式工作是否有充分的理由?

ruby - 将执行的 SQL 结果转换为 Model 对象列表

json - 什么是标记语言? (XML、YAML、JSON)

jquery - 静态文件丢失

python - PyYAML 给出构造函数错误?

c++ - 使用yaml-cpp错误解析YAML文件

ruby - 定义了 Ruby 的奇怪行为?

ruby-on-rails - Rails 5 Assets 未在生产中加载

mysql - Ruby 哈希返回不正确的值