Schrägstriche in einzelnen Strings in Anführungszeichen vs. Doppel Strings in Anführungszeichen

StackOverflow https://stackoverflow.com/questions/648156

Frage

Wenn ich einen umgekehrten Schrägstrich + Raum zu Beginn der Doppel- und Einzel Anführungszeichen hinzufügen, erhalte ich unterschiedliche Ergebnisse:

"\ text"
'\ text' 

In der Ausgabe für die doppelten Anführungszeichen ich nur einen Raum zu sehen.
In der Ausgabe für die einzelne Zeichenfolge in Anführungszeichen Ich sehe Backslash + Raum.

Was passiert da? Ist dies, weil '\ ' als Sonderzeichen in dem doppelten Anführungszeichen Zeichenfolge interpretiert wird, sondern in dem einzigen String in Anführungszeichen die Zeichen erhalten bleiben wie?

Wenn ich die Saiten dies zu ändern, sehe ich die gleiche Ausgabe, nämlich einen einzelnen Schrägstrich gefolgt von einem Leerzeichen und dann dem Text:

"\\ text"
'\\ text' 

In beiden Fällen wird der Backslash. Ich bin verwirrt, warum sie auf die gleiche Weise in dieser Situation arbeiten.

Gibt es eine Regel, die den grundlegenden Unterschied zwischen dem, wie einzelnen Strings in Anführungszeichen und doppelte Anführungszeichen behandeln Schrägstriche in Ruby?

zu erklären, würde dazu beitragen,
War es hilfreich?

Lösung

Ich würde verweisen Sie auf " Ruby-Programmierung / Strings " für ein sehr kurzer, aber umfassender Überblick über die Unterschiede.

Aus dem Referenz:

  

puts "Betty's pie shop"

     

puts 'Betty\'s pie shop'

     

Da „Betty“ enthält einen Apostroph, die den gleichen Charakter wie das Apostroph ist, in der zweiten Zeile brauchen wir einen umgekehrten Schrägstrich verwenden, um den Apostroph zu entkommen, so dass Ruby versteht, dass der Apostroph in der Zeichenfolge ist wörtlich statt Markierung das Ende des Stringliteral. Der Backslash durch den Apostroph folgt eine Escape-Sequenz genannt.

Andere Tipps

Strings in doppelten Anführungszeichen das gesamte Spektrum der Escape-Sequenzen unterstützen, wie unten dargestellt:

  • \a Glocke / alert (0x07)
  • \b Rücktaste (0x08)
  • \e Escape (0x1b)
  • \f Formford (0x0c)
  • \n Newline (0x0a)
  • \r Return (0x0d)
  • \s Raum (0x20)
  • \t Tab (0x09)
  • \v Vertikale Reiter (0x0b)

Für Single-Strings in Anführungszeichen, zwei aufeinander folgende Schrägstriche werden durch einen einzelnen Backslash ersetzt, und ein Schrägstrich durch einen Apostroph gefolgt wird zu einem einzigen Zitat:

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

Rubin interpretiert nur Sequenzen in doppelten Anführungszeichen Strings entkommen. In einem einzigen String in Anführungszeichen, nur \\ (Backslash Backslash) und \' (Backslash Zitat) als Sonderzeichen gemacht. Sie sollten verwenden Sie doppelte Anführungszeichen nur, wenn Sie mehr Interpretation benötigen. Ansonsten bieten einfache Anführungszeichen eine Leistungssteigerung.

Wenn Sie mit dem Namen einer Variablen erwähnt, Rubin nie das tut. Nur der Name der Variablen wird als mehr der Stringliteral behandelt. So schließen Sie den Wert einer Variablen (oder einen Ausdruck) setzt den Ausdruck in etwa so aus:

"#{variable}"

Beachten Sie, dass dies nur in doppelten Anführungszeichen funktioniert. Um eine Variable zu einem einzigen zitierte man hinzufügen, müssen Sie dies tun:

'The value of X is: '+X

Wenn Sie ernsthaft Formatierung benötigen, schauen Sie in Ruby-Version von sprintf und printf. Sie sind ziemlich viel Wrapper um die C-Funktionen und sind sehr mächtig, aber ein wenig umständlich zu bedienen.

Dies ist keine vollständige Antwort (da die einfache Frage bereits beantwortet wurde), sondern es ist zusätzliche Informationen an.

Welcher Stil von Ruby Zeichenfolge zitieren bevorzugen Sie?

  

Verwenden Sie keine doppelte Anführungszeichen, wenn Sie müssen   entfliehen sie. Und fallen nicht in „Single   vs doppelte Anführungszeichen“trap. Ruby hat   eine hervorragende Unterstützung für beliebige   Trennzeichen für Stringliterale:

     

http://rors.org/2008/10/26 / dont-entweichen-in-Strings

Ich nahm diesen Rat und habe es nie bereut!

  

Ist dies, weil die ‚\‘ ist   als Sonderzeichen interpretiert   der doppelten Anführungszeichen Zeichenfolge aber in der   Einzel zitierte Zeichenfolge die Zeichen   erhalten sind wie?

Ja. Single-Strings in Anführungszeichen werden als Literale behandelt; Strings in doppelten Anführungszeichen werden interpoliert. Dies ist das gleiche in anderen Rubinen wie Sprachen und hat in 1.9 nicht geändert.

Sie können <%= f.label :nom_entreprise, "Nom de l'entreprise" %> machen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top