web-dev-qa-db-fra.com

Ai-je besoin de guillemets pour les chaînes dans YAML?

J'essaie d'écrire un dictionnaire YAML pour l'internationalisation d'un projet Rails. Je suis cependant un peu confus, car dans certains fichiers, je vois des chaînes entre guillemets et dans d'autres sans. Quelques points à considérer:

  • exemple 1 - toutes les chaînes utilisent des guillemets doubles;
  • exemple 2 - aucune chaîne (à l'exception des deux dernières) n'utilise des guillemets;
  • le livre de recettes YAML dit: Le fait de mettre des chaînes entre guillemets vous permet d'utiliser des échappements pour représenter les caractères ASCII et Unicode. Cela signifie-t-il que je n'ai besoin d'utiliser des guillemets que lorsque je souhaite échapper des caractères? Si oui - pourquoi utilisent-ils des guillemets partout dans le premier exemple - uniquement pour des raisons d'unité/stylistiques?
  • les deux dernières lignes de l'exemple 2 utilisent ! - la balise non spécifique, alors que les deux dernières lignes du premier exemple ne le sont pas - et elles fonctionnent toutes les deux.

Ma question est la suivante: quelles sont les règles d'utilisation des différents types de citations dans YAML?

Pourrait-on dire que:

  • en général, vous n'avez pas besoin de guillemets;
  • si vous voulez échapper des caractères, utilisez des guillemets doubles;
  • utilisez ! avec des guillemets simples, quand ...?!?
329
Alex Popov

Après une brève revue du livre de recettes YAML cité dans la question et quelques tests, voici mon interprétation:

  • En général, vous n'avez pas besoin de devis.
  • Utilisez des guillemets pour forcer une chaîne, par exemple. si votre clé ou votre valeur est 10 mais que vous souhaitez qu'elle renvoie une chaîne et non un fixnum, écrivez '10' ou "10".
  • Utilisez des guillemets si votre valeur comprend des caractères spéciaux (par exemple, :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, _ , !, %, @, \).
  • Les guillemets simples vous permettent de mettre presque n'importe quel caractère dans votre chaîne, sans essayer d'analyser les codes d'échappement. '\n' serait renvoyé sous la chaîne \n.
  • Les guillemets doubles analysent les codes d'échappement. "\n" serait renvoyé sous forme de caractère de saut de ligne.
  • Le point d'exclamation introduit une méthode, par ex. !Ruby/sym pour retourner un symbole Ruby.

Il me semble que la meilleure approche serait de ne pas utiliser de guillemets à moins que vous ne soyez obligés de le faire, puis d'utiliser des guillemets simples à moins que vous ne souhaitiez spécifiquement traiter des codes d'échappement.

Mise à jour

"Oui" et "Non" doivent être entre guillemets (simples ou doubles), sinon ils seront interprétés comme des valeurs TrueClass et FalseClass:

en:
  yesno:
    'yes': 'Yes'
    'no': 'No'
467
Mark Berry