Question

Si j'ajoute une barre oblique inversée + un espace au début des chaînes entre guillemets simples et doubles, le résultat obtenu est différent:

"\ text"
'\ text' 

Dans la sortie de la chaîne à double guillemet, je ne vois qu'un espace.
Dans la sortie de la chaîne entre guillemets, je vois une barre oblique inverse + espace.

Qu'est-ce qui se passe là-bas? Est-ce parce que '\ ' est interprété comme un caractère spécial dans la chaîne de guillemet double alors que dans la chaîne entre guillemets simples, les caractères sont conservés tels quels?

Si je change les chaînes en ceci, je vois la même sortie, à savoir une seule barre oblique suivie d'un espace puis du texte:

"\\ text"
'\\ text' 

Dans les deux cas, la barre oblique inversée est échappée. Je ne comprends pas pourquoi ils travaillent de la même manière dans cette situation.

Existe-t-il une règle qui aiderait à expliquer la différence fondamentale entre la façon dont les chaînes entre guillemets simples et les guillemets doubles traitent les barres obliques inverses en Ruby?

Autres conseils

Les chaînes entre guillemets prennent en charge la gamme complète des séquences d'échappement, comme indiqué ci-dessous:

  • \a sonnerie / alerte (0x07)
  • \b Retour arrière (0x08)
  • \e échapper (0x1b)
  • \f Formford (0x0c)
  • \n Nouvelle ligne (0x0a)
  • \r Renvoyer (0x0d)
  • \s Espace (0x20)
  • \t Onglet (0x09)
  • \v onglet vertical (0x0b)

Pour les chaînes entre guillemets simples, deux barres obliques inverses consécutives sont remplacées par une seule barre oblique inversée, et une barre oblique inverse suivie d'un guillemet simple devient un guillemet simple:

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

Ruby n'interprète les séquences d'échappement que dans les chaînes entre guillemets. Dans une seule chaîne entre guillemets, seuls \\ (barres obliques inverses) et \' (guillemets) sont pris en tant que caractères spéciaux. Vous ne devez utiliser des chaînes entre guillemets que lorsque vous avez besoin de plus d'interprétation. Sinon, les guillemets simples améliorent les performances.

Lorsque vous avez mentionné l'inclusion du nom d'une variable, Ruby ne le fait jamais. Seul le nom de la variable est traité comme davantage de littéral de chaîne. Pour inclure la valeur d'une variable (ou de toute expression), mettez l'expression comme suit:

"#{variable}"

Notez que cela ne fonctionne que dans des chaînes entre guillemets. Pour ajouter une variable à une seule citation, procédez comme suit:

'The value of X is: '+X

Si vous avez besoin d'une mise en forme sérieuse, examinez les versions de sprintf et printf de Ruby. Ils encapsulent les fonctions C et sont assez puissants, mais un peu encombrants à utiliser.

Il ne s’agit pas d’une réponse complète (la réponse à la question simple ayant déjà été posée), c’est plutôt une information supplémentaire.

Quel style de chaîne Ruby citant préférez-vous?

  

N'utilisez pas de guillemets doubles si vous devez le faire.   leur échapper. Et ne tombez pas en & Quot; célibataire   vs doubles guillemets " piège. Ruby a   excellent support pour arbitraire   délimiteurs pour les littéraux de chaîne:

     

http://rors.org/2008/10/26 / dont-escape-in-strings

J'ai suivi ce conseil et je n'ai jamais regardé en arrière!

  

Est-ce parce que le '\' est   interprété comme un caractère spécial dans   la chaîne de guillemet double mais dans le   chaîne entre guillemets simples les caractères   sont conservés tels quels?

Oui. Les chaînes entre guillemets simples sont traitées comme des littéraux. les chaînes entre guillemets sont interpolées. C’est la même chose dans les autres langages qui ressemblent à Ruby, et n’a pas changé depuis la version 1.9.

vous pouvez faire <%= f.label :nom_entreprise, "Nom de l'entreprise" %>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top