小编典典

YAML:我需要为 YAML 中的字符串加上引号吗?

all

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

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

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

是不是可以这么说:

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

阅读 435

收藏
2022-03-07

共1个答案

小编典典

在简要回顾了问题中引用的 YAML 食谱并进行了一些测试之后,这是我的解释:

  • 通常,您不需要引号。
  • 使用引号强制字符串,例如,如果您的键或值是10但您希望它返回字符串而不是 Fixnum,请写入'10'"10"
  • 如果您的值包含特殊字符,请使用引号(例如:, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \)。
  • 单引号可让您在字符串中放置几乎任何字符,并且不会尝试解析转义码。'\n'将作为字符串返回\n
  • 双引号解析转义码。 "\n"将作为换行符返回。
  • 感叹号引入了一种方法,例如!ruby/sym返回一个 Ruby 符号。

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

更新

“是”和“否”应该用引号括起来(单引号或双引号),否则它们将被解释为 TrueClass 和 FalseClass 值:

en:
  yesno:
    'yes': 'Yes'
    'no': 'No'
2022-03-07