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


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

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

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

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

спасибо.

1 250

1 ответ:

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

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

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

обновление

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

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