Нужны ли мне кавычки для строк в Yaml?
Я пытаюсь написать словарь YAML для интернационализации проекта Rails. Я немного смущен, хотя, как и в некоторых файлах, я вижу строки в двойных кавычках, а в некоторых без них. Несколько моментов, чтобы рассмотреть:
- Пример 1 - все строки используются двойные кавычки;
- Пример 2 - никакие строки (кроме последних двух) не используют кавычки;
- the и YAML поваренной говорит: заключая строки в двойном кавычки позволяет использовать экранирование для представления символов ASCII и Unicode. означает ли это, что мне нужно использовать двойные кавычки только тогда, когда я хочу избежать некоторых символов? Если да-почему они везде используют двойные кавычки в первом примере-только ради единства / стилистических причин?
- последние две строки примера 2 используют
!- неспецифический тег, в то время как последние две строки первого примера не делают - и они оба работают.
мой вопрос - каковы правила использования различных типов котировок в YAML. Можно ли сказать, что:
- В общем, вам не нужны цитаты;
- если вы хотите экранировать символы, используйте двойные кавычки;
- использовать
!с одинарными кавычками, когда... ?!?
спасибо.
1 ответ:
после краткого обзора поваренной книги YAML, приведенной в вопросе, и некоторых тестов, вот моя интерпретация:
- В общем, вам не нужны цитаты.
- используйте кавычки, чтобы заставить строку, например, если ваш ключ или значение
10но вы хотите, чтобы он возвращал строку, а не Fixnum, напишите'10'или"10".- цитаты использовать, если значение содержит специальные символы (например,
:,{,},[,],,,&,*,#,?,|,-,<,>,=,!,%,@,\).- одинарные кавычки позволяют поместить почти любой символ в строку, и не будет пытаться разобрать escape-коды.
'\n'будет возвращена в виде строки\n.- двойные кавычки разбирают escape-коды.
"\n"будет возвращен как символ подачи строки.- восклицательный знак вводит метод, например,
!ruby/symдля возврата Рубиновый символ.мне кажется, что лучшим подходом было бы не использовать кавычки, если вам не нужно, а затем использовать одиночные кавычки, если вы специально не хотите обрабатывать escape-коды.
обновление
"да "и" нет " должны быть заключены в кавычки (одинарные или двойные), иначе они будут интерпретироваться как значения TrueClass и FalseClass:
en: yesno: 'yes': 'Yes' 'no': 'No'