关于语法:我是否需要YAML中字符串的引号?

Do I need quotes for strings in YAML?

我正试图为Rails项目的国际化编写一个yaml字典。不过,我有点困惑,因为在某些文件中,我看到双引号中的字符串,而在一些没有双引号的文件中。需要考虑的几点:

  • 示例1-所有字符串都使用双引号;
  • 示例2-没有字符串(除了最后两个)使用引号;
  • yamlcookbook说:用双引号括住字符串可以使用escaping来表示ASCII和Unicode字符。这是否意味着我只需要在想要转义某些字符时使用双引号?如果是-为什么他们在第一个例子中到处使用双引号-仅仅是为了统一/风格原因?
  • 示例2的最后两行使用!——非特定标记,而第一个示例的最后两行不使用——它们都可以工作。

我的问题是:在yaml中使用不同类型引号的规则是什么?

可以说:

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


在简要回顾了问题中引用的山药食谱和一些测试之后,我的解释如下:

  • 一般来说,您不需要引号。
  • 使用引号强制一个字符串,例如,如果您的键或值是10,但您希望它返回一个字符串而不是fixnum,则写入'10'"10"
  • 如果你的价值包括特殊字符(如::{}[],&*#,EDOCX11〔12〕,|-,EDOCX11〔15〕,EDOCX11〔16〔16〕16〔16〔16〕,EDOCX11〔16〕,EDOCX11〔10〕,EDOCX11〔10〕,EDOCX11〔11〕,EDOCX11〔11〕,EDOCX11〔12〕,EDOCX11〔12〕,EDOCX11〔13〕,EDOCX11〔13、=!%@\
  • 单引号可以让您在字符串中放入几乎任何字符,并且不会尝试解析转义代码。'
    '
    将作为字符串
    返回。
  • 双引号解析转义码。"
    "
    将作为换行符返回。
  • 感叹号引入了一种方法,例如!ruby/sym返回一个红宝石符号。

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

更新

"是"和"否"应包含在引号中(单引号或双引号),否则它们将被解释为真类和假类值:

1
2
3
4
en:
  yesno
:
    'yes'
: 'Yes'
    'no'
: 'No'