Нужны ли мне котировки для строк в Ямле?

Я пытаюсь написать словарь YAML для интернационализации проекта Rails. Я немного смущен, хотя, как и в некоторых файлах, я вижу строки в двойных кавычках, а в некоторых - без. Несколько моментов для рассмотрения:

  • пример 1 - все строки используют двойные кавычки;
  • пример 2 - никакие строки (кроме последних двух) не используют кавычки;
  • кулинарная книга YAML говорит: Привязка строк в двойных кавычках позволяет использовать экранирование для представления символов ASCII и Unicode. Означает ли это, что мне нужно использовать двойные кавычки только тогда, когда я хочу избежать некоторых символов? Если да - почему они используют двойные кавычки повсюду в первом примере - только ради единства/стилистических причин?
  • в последних двух строках примера 2 используйте ! - неспецифический тег, а последние две строки первого примера - нет, и оба они работают.

Мой вопрос: каковы правила использования разных типов котировок в YAML. Можно ли сказать, что:

  • в общем, вам не нужны кавычки;
  • Если вы хотите использовать символы, используйте двойные кавычки;
  • используйте ! с одинарными кавычками, когда...?!?

Спасибо.

Ответ 1

После краткого обзора кулинарной книги YAML, приведенной в вопросе и некоторых тестах, здесь моя интерпретация:

  • В общем, вам не нужны кавычки.
  • Использовать кавычки для принудительной строки, например. если ваш ключ или значение 10, но вы хотите, чтобы он возвращал строку, а не Fixnum, напишите '10' или "10".
  • Используйте кавычки, если ваше значение включает специальные символы (например, :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \).
  • Одиночные кавычки позволяют помещать почти любой символ в вашу строку и не будут пытаться анализировать escape-коды. '\n' будет возвращен как строка \n.
  • Двойные кавычки управляют паролями. "\n" будет возвращен как символ строки.
  • Восклицательный знак вводит метод, например. !ruby/sym, чтобы вернуть символ Ruby.

Мне кажется, что наилучшим подходом было бы не использовать кавычки, если только вам это нужно, а затем использовать одинарные кавычки, если вы специально не хотите обрабатывать escape-коды.

Обновить

"Да" и "Нет" должны быть заключены в кавычки (одиночные или двойные), иначе они будут интерпретироваться как значения TrueClass и FalseClass:

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