我需要Yaml中的string引号吗?

我正在尝试编写一个Rails项目国际化的YAML字典。 我有点困惑,因为在一些文件中,我看到双引号string,有些没有。 有几点需要考虑:

  • 例子1 – 所有string都使用双引号;
  • 例子2 – 没有string(最后两个除外)使用引号;
  • YAML食谱说: 用双引号括起string,可以使用转义来表示ASCII和Unicode字符。 这是否意味着我只有在我想逃避某些angular色时才需要使用双引号? 如果是的话 – 为什么他们在第一个例子中到处都用双引号 – 只是为了统一/风格的原因?
  • 例2的最后两行使用! – 非特定的标签,而第一个例子的最后两行没有 – 他们都工作。

我的问题是 – 在YAML中使用不同types的引号的规则是什么。 难道可以这样说:

  • 一般来说,你不需要报价;
  • 如果你想转义字符使用双引号;
  • 使用! 用单引号,当…?!?

谢谢。

在简要回顾了YAML食谱中提到的问题和一些testing后,我的解释是:

  • 一般来说,你不需要报价。
  • 使用引号强制一个string,例如,如果你的键或值是10但你想要它返回一个string,而不是一个修订号,写'10'"10"
  • 如果您的值包含特殊字符(例如:{}[] ,, &*#?|-<>=!%@\ ,请使用引号。
  • 单引号让你把几乎任何字符放在你的string中,而不会尝试parsing转义码。 '\n'将作为string\n返回。
  • 双引号分析转义码。 "\n"将作为换行符返回。
  • 感叹号引入了一个方法,例如!ruby/sym返回一个Ruby符号。

在我看来,最好的办法是不使用引号,除非你必须使用单引号,除非你特别想处理转义码。

更新

引号(“单引号”或“双引号”)应该包含“是”和“否”,否则将被解释为TrueClass和FalseClass值:

 en: yesno: 'yes': 'Yes' 'no': 'No'