Ruby-Arrays:% w vs% W.

152

Was ist der Unterschied?

Allyn
quelle
18
"% w" ist meine übliche Antwort an Leute, die etwas zu übermütig über die Lesbarkeit von Ruby werden. Funktioniert jedes Mal.
Craig Stuntz
Jetzt hast du eine noch bessere Antwort :-)
Errata
6
Als irrelevante Randnotiz verwirrte mich die URL für diese Frage eine Weile, während die Seite geladen wurde.
Fund Monica Klage

Antworten:

233

% 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}"]
Brian Campbell
quelle
Ihr Beispiel zeigt auch doppelte Anführungszeichen für% w. Ist es richtig?
Foton
Ja. Beim Drucken der Ausgabe verwendet Ruby immer doppelte Anführungszeichen und maskiert Zeichen wie #. '#{foo}'und "\#{foo}"geben Sie die gleiche Zeichenfolge, die Sie mit überprüfen können '#{foo}' == "\#{foo}"in irb.
Brian Campbell
Es ist auf den ersten Blick etwas verwirrend, aber danke für die Erklärung.
Foton
29

Eine Anwendung, die ich für% W vs% w gefunden habe:

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]
aaandre
quelle
12
Obwohl es in diesem Fall wahrscheinlich einfacher ist, dies einfach zu tungreetings = %w(hi hello how\ do\ you\ do)
Dinjas
21

% W führt normale doppelte Anführungszeichen durch. % w nicht.

Brian
quelle
11

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

Mark C.
quelle
1
Das ist ein guter Artikel. Mir war nicht klar, dass Sie Zeichenfolgen oder andere Dinge auf die gleiche Weise erstellen können und die einschließenden Zeichen beliebig sein können. Zum Beispiel%w&readable af&
Dex
1

%Wwird für Array-Elemente in doppelten Anführungszeichen verwendet, wie %Qz.

foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]

%wwird für Array-Elemente in einfachen Anführungszeichen wie verwendet %q.

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]
Faruk Hossen
quelle
0
array = %w(a b c d) 

Gleich wie

array = ["a", "b", "c", "d"]

%w ist ein Abkürzungssymbol für das Anführungszeichen der Zeichenfolge!

Kasem007
quelle