Was ist der Unterschied?
Was ist der Unterschied?
Antworten:
% w Anführungszeichen wie einfache Anführungszeichen ''
(keine variable Interpolation, weniger Escape-Sequenzen), während% W Anführungszeichen wie doppelte Anführungszeichen sind ""
.
irb(main):001:0> foo="hello"
=> "hello"
irb(main):002:0> %W(foo bar baz #{foo})
=> ["foo", "bar", "baz", "hello"]
irb(main):003:0> %w(foo bar baz #{foo})
=> ["foo", "bar", "baz", "\#{foo}"]
#
. '#{foo}'
und "\#{foo}"
geben Sie die gleiche Zeichenfolge, die Sie mit überprüfen können '#{foo}' == "\#{foo}"
in irb
.
Obwohl es sich um einen alten Beitrag handelt, taucht die Frage immer wieder auf und die Antworten scheinen mir nicht immer klar zu sein. Also, hier sind meine Gedanken.
% G und% W sind Beispiele für allgemein begrenzte Eingabetypen , die auf Arrays beziehen. Es gibt andere Typen, die% q,% Q,% r,% x und% i umfassen.
Der Unterschied zwischen Groß- und Kleinschreibung besteht darin, dass wir Zugriff auf die Funktionen von einfachen und doppelten Anführungszeichen erhalten. Mit einfachen Anführungszeichen und Kleinbuchstaben% w haben wir keine Code-Interpolation (z. B. # {someCode}) und einen begrenzten Bereich funktionierender Escape-Zeichen (z. B. \, \ n). Mit doppelten Anführungszeichen und Großbuchstaben% W machen wir das Zugang zu diesen Funktionen.
Das verwendete Trennzeichen kann ein beliebiges Zeichen sein, nicht nur die offene Klammer. Spielen Sie mit den obigen Beispielen, um dies zu sehen.
Eine vollständige Beschreibung mit Beispielen für% w und die vollständige Liste, Escapezeichen und Trennzeichen finden Sie unter: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html
Kennzeichen
%w&readable af&
Dokumentation für Prozentzeichenfolgen: http://ruby-doc.org/core-2.2.0/doc/syntax/literals_rdoc.html#label-Percent+Strings
%W
wird für Array-Elemente in doppelten Anführungszeichen verwendet, wie %Q
z.
foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]
%w
wird für Array-Elemente in einfachen Anführungszeichen wie verwendet %q
.
%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]