Ich habe Thomas 'Programming Ruby 1.9 gelesen und bin auf die alternativen abgegrenzten Methoden für einfache und doppelte Anführungszeichen gestoßen ( %q / %Q
). Ich kenne sie auch aus anderen Ruby-Sprachreferenzen.
%q/I'm acting like a single-quoted string/
%Q|"I'm acting like a double-quoted string" --Anonymous|
Ich habe nicht lange mit Ruby gearbeitet, aber ich habe diese Anführungsmethode im Produktionscode noch nie erlebt.
Abgesehen von der offensichtlichen Möglichkeit, das interne Entkommen von Anführungszeichen mit Backslashes zu vermeiden , was sind die häufigsten Anwendungsfälle für diese Methode zum Zitieren über reguläre einfache oder doppelte Anführungszeichen? Werden sie normalerweise in ein- oder mehrzeiligen Zeichenfolgen verwendet? Werden sie bei Verwendung in mehrzeiligen Zeichenfolgen jemals gegenüber HEREDOC-Zeichenfolgen bevorzugt? Gibt es eine bestimmte Ruby-Sprache, in der sie häufig vorkommen?
str = <<-TEXT.lines.map(&:strip) ...
Antworten:
Sie sind außerordentlich nützlich, um HTML mit JavaScript zu umgehen, wenn Ihnen bereits die Zitiermethoden "ausgehen":
link = %q[<a href="javascript:method('call')">link</a>]
Ich habe auch festgestellt, dass sie bei der Arbeit mit mehrzeiligen SQL-Anweisungen sehr nützlich sind:
execute(%Q[ INSERT INTO table_a (column_a) SELECT value FROM table_b WHERE key='value' ])
Der Vorteil besteht darin, dass Sie nicht auf die Art der in Ihrer Abfrage verwendeten Angebote achten müssen. Es funktioniert entweder mit Single, Double oder beiden. Sie sind auch viel weniger Aufhebens als die HEREDOC-Methode.
Ruby bietet andere praktische Methoden wie diese, mit
%r
denen reguläre Ausdrücke erstellt werden können. Das vermeidet Schrägstriche, wenn versucht wird, einen zu schreiben, der solche Dinge handhabthttp://
, sonst müsste entkommen.quelle
Überblick
Neben "Vermeiden Sie internes Entkommen von Anführungszeichen" und den zuvor von @tadman bereitgestellten Beispielen gibt es auch andere Anwendungsfälle:
Einzelheiten
Dieser Ansatz ist eine universelle und robuste Redewendung, die sich gut für alle Tools eignet, die automatisierte Codegenerierung durchführen, einschließlich, aber nicht beschränkt auf Tools, die Code in anderen Sprachen schreiben, oder Tools, die Codefragmente für eine IDE oder einen Texteditor verwalten .
Neben den bereits von @tadman bereitgestellten Beispielen gibt es den allgemeinen Fall des Generierens von Code, bei dem der generierte Code dieselbe oder im Wesentlichen ähnliche Syntax wie der Code des generierenden Programms aufweist.
In diesen Fällen hilft die Lösung nicht nur dabei, die Verwendung von Backslashes zu vermeiden, um Anführungszeichen zu vermeiden. Ohne eine solche Lösung kann es Fälle geben, in denen die Wartung des generierten Codes äußerst schwierig wird.
Um Beispiele dafür zu sehen, schauen Sie sich bitte die folgenden Referenzen an.
Verweise
[Siehe z.
]]
quelle
Es ist vielleicht erwähnenswert, dass% q standardmäßig von Bundler und Juwelier beim Generieren von Gemspecs für den Abschnitt Zusammenfassung / Beschreibung der Gemspec verwendet wird. Dies verhindert, dass jemand Anführungszeichen in der Zusammenfassung oder Beschreibung verwendet und die Gemspec bricht.
quelle
Ich weiß, dass dies ein alter Thread ist, aber ich habe sie in der Produktion verwendet, als ich einen Systembefehl aufrief und einige Werte interpolieren wollte, wie zum Beispiel:
system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))
Super praktisch.
quelle
Sie sind nützlich, wenn Ihre Zeichenfolge einfache oder doppelte Anführungszeichen enthält. Dies kommt nicht allzu oft vor, aber die Technik ist sehr nützlich, wenn dies der Fall ist.
quelle