Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen

Einführung

Bei der Durchführung einer Elementsuche mit der find-Methode während des Rails-Integrationstests ist ein Syntaxfehler aufgetreten, den ich als Memorandum zusammengefasst habe.

Ursache

Wenn Sie den Selektor im Integrationstest abrufen, tritt SyntaxError auf, wenn Sie wie folgt schreiben.

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

Wenn Sie es wie folgt ändern

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

SyntaxError wurde behoben. Warum ist der SyntaxError aufgetreten?

Annahme

(WIP) Die Erweiterung von Ausdrücken ist mit doppelten Anführungszeichen möglich, die Erweiterung von Ausdrücken jedoch nicht mit einfachen Anführungszeichen.

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

Einfaches Zitat

> number = 1234
=> 1234
> '090#{number}5678'
=> "090\#{number}5678"
#Ausdruckserweiterung ist nicht möglich

Es gibt einen deutlichen Unterschied zwischen doppelten und einfachen Anführungszeichen.

Die Backslash-Notation gilt für doppelte Anführungszeichen.

puts "Wird kaputt sein\n war fertig"

Wird kaputt sein
es war erledigt

In einfachen Anführungszeichen

puts 'Keine Zeilenumbrüche\war nicht n'
Wird kaputt sein\war nicht n

Grund

Wenn der Ruby-Interpreter (derjenige, der den Code analysiert) das anfängliche doppelte Anführungszeichen (einfaches Anführungszeichen) erkennt, erkennt er das nächste doppelte Anführungszeichen (einfaches Anführungszeichen) als geschlossen.

"(← Zeichenfolge starten)"(← Zeichenkette geschlossen) Zeichen (← Was ist das und es tritt ein Fehler auf.)
Wenn Sie ihm entkommen, wird er als Teil des Strings erkannt, anstatt geschlossen zu werden. Lassen Sie uns also entkommen.

Sie müssen es wie folgt entkommen:

Gutes Beispiel:
'\'hoge\''
"\"hoge\""
"'hoge'"
'"hoge"'

schlechtes Beispiel:
""hoge""
''hoge''

Übrigens, wenn Sie ein Muster wie dieses mit irb überprüfen

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

Es wird wie oben entkommen. Daher scheint es, dass der Fehler vermieden werden könnte.

Zusammenfassung

Ich dachte, dass dies der Fall war, als ich normal darüber nachdachte, aber wenn Sie ähnliche Fragen haben, würde ich es begrüßen, wenn Sie es lesen könnten.

Recommended Posts

Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen
Über Ruby-Hashes und -Symbole
Über Ruby und Objektmodell
Informationen zu Ruby-Klassen und -Instanzen
Informationen zum Ruby-Produktoperator (&) und zum Summenoperator (|)
Über objektorientierte Vererbung und über Ertrag Ruby
Über Ruby-Symbole
Über Ruby Hash
[Über Double Hash]
Über Ruby-Arrays
[Rubin] Doppelter Hash
Informationen zur Ruby-Vererbung
Über Rubinblock
Über Ruby Hash
Über Ruby-Symbole
Rubin und Edelstein
Über Ruby-Methoden
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
Informationen zu Ruby-Fehlermeldungen
[Ruby] Klassen und Instanzen
Informationen zur Behandlung von Ruby-Ausnahmen
Symbole und zerstörerischer Rubin
Über Ruby Hash (Fortsetzung)
[Ruby] Big Decimal und DECIMAL
Über Bean und DI
Über Klassen und Instanzen
Eine grobe Anmerkung zu Ruby-Arrays und Hash-Objekten
Über bekommt und bekommt.chomp
Informationen zu Ruby-Instanzmethoden
Über Weiterleiten und Weiterleiten
Ruby-Klassen und -Instanzen
Ruby-Vererbung und -Delegierung
Über Kapselung und Vererbung
[Technisches Memo] Über die Vor- und Nachteile von Ruby
Informationen zu Serializable und serialVersionUID
Achten Sie auf Ruby-Methodenaufrufe und Variablenreferenzen
Über Logik nachdenken Ruby
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Über für Anweisung und wenn Anweisung
Über synchronisierte und Wiedereintrittssperre
Erläuterung des Ruby Range-Objekts
Über reguläre Ausdrücke in Ruby
Transaktionen, Sperren und doppelte Abrechnung
[Java] Über String und StringBuilder
Ungefähr der gleiche und der gleiche Wert
Ruby C Erweiterung und flüchtig
Fassen Sie Ruby und Dependency Injection zusammen
Ruby über verschiedene iterative Prozesse