Ruby-Arrays:% w vs% W.


152

Was ist der Unterschied?


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}"]

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"]

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.


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


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}"]

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!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.