À propos des guillemets simples et doubles Ruby

introduction

Lors de l'exécution d'une recherche d'élément à l'aide de la méthode find lors du test d'intégration Rails, une erreur de syntaxe s'est produite, je l'ai donc résumée sous forme de mémorandum.

Cause

Lors de l'obtention du sélecteur dans le test d'intégration, SyntaxError se produit si vous écrivez comme suit.

  find("input[name="commit"]").click

Si vous le modifiez comme suit

  find('input[name="commit"]').click

SyntaxError a été résolu. Pourquoi l'erreur SyntaxError s'est-elle produite?

supposition

(WIP) L'expansion d'expression est possible avec des guillemets doubles, mais l'expansion d'expression n'est pas possible avec des guillemets simples.

> number = 1234
=> 1234
> "090#{number}5678"
=> "09012345678"

Simple citation

> number = 1234
=> 1234
> '090#{number}5678'
=> "090\#{number}5678"
#L'expansion d'expression n'est pas possible

Il existe une nette différence entre les guillemets doubles et les guillemets simples.

La notation backslash est valide pour les guillemets doubles.

puts "Sera cassé\n était fait"

Sera cassé
c'était fait

En guillemet simple

puts 'Aucun saut de ligne\n'était pas n'
Sera cassé\n'était pas n

Raison

Lorsque l'interpréteur ruby (celui qui analyse le code) reconnaît le guillemet double de départ (guillemet simple), il reconnaît le guillemet double suivant (guillemet simple) comme fermé.

"(← Chaîne de caractères de début)"(← Chaîne de caractères fermée) Caractère (← Qu'est-ce que c'est et une erreur se produit.)
Si vous l'échappez, elle sera reconnue comme faisant partie de la chaîne au lieu d'être fermée, alors échappons-la.

Vous devez y échapper comme suit:

Bon exemple:
'\'hoge\''
"\"hoge\""
"'hoge'"
'"hoge"'

mauvais exemple:
""hoge""
''hoge''

Au fait, si vous cochez un modèle comme celui-ci avec irb

> str = '"hoge"'
=> "\"hoge\""

Il s'échappera comme ci-dessus. Par conséquent, il semble que l'erreur pourrait être évitée.

Résumé

Je pensais que c'était le cas lorsque j'y pensais normalement, mais si vous avez des questions similaires, j'apprécierais que vous puissiez le lire.

Recommended Posts

À propos des guillemets simples et doubles Ruby
À propos des hachages et symboles Ruby
À propos de Ruby, modèle objet
À propos des classes et des instances Ruby
À propos de l'opérateur de produit Ruby (&) et de l'opérateur somme (|)
À propos de l'héritage orienté objet et du rendement Ruby
À propos des symboles Ruby
À propos de Ruby Hash
[À propos du double hachage]
À propos des tableaux Ruby
[ruby] Double hachage
À propos de l'héritage Ruby
À propos de Ruby Block
À propos de Ruby Hash
À propos des symboles Ruby
Rubis et gemme
À propos des méthodes Ruby
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
À propos des messages d'erreur Ruby
[Ruby] Classes et instances
À propos de la gestion des exceptions Ruby
Symboles et rubis destructeur
À propos de Ruby Hash (suite)
[Ruby] Big Decimal et DECIMAL
À propos de Bean et DI
À propos des classes et des instances
Une note approximative sur les tableaux Ruby et les objets de hachage
À propos de gets et gets.chomp
À propos des méthodes d'instance Ruby
À propos de la redirection et du transfert
Classes et instances Ruby
Héritage et délégation Ruby
À propos de l'encapsulation et de l'héritage
[Note technique] À propos des avantages et des inconvénients de Ruby
À propos de Serializable et serialVersionUID
Méfiez-vous des appels de méthode Ruby et des références de variables
Réflexion sur la logique Ruby
[Ruby] Questions et vérification du nombre d'arguments de méthode
À propos de l'instruction et de l'instruction if
À propos du verrouillage synchronisé et réentrant
Explication sur l'objet Ruby Range
À propos des expressions régulières dans Ruby
Transactions, serrures et double facturation
[Java] À propos de String et StringBuilder
À peu près la même et la même valeur
Extension Ruby C et volatile
Résumer l'injection de rubis et de dépendances
Ruby à propos de divers processus itératifs