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

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

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

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

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

спасибо.

1 ответов


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

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

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

обновление

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

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