984 Stimmen

Was bedeutet %w(array)?

Ich schaue mir gerade die Dokumentation für FileUtils an.

Die folgende Zeile verwirrt mich:

FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'

Was bedeutet die %w bedeuten? Können Sie mir einen Hinweis auf die Dokumentation geben?

1 Stimmen

Ist damit Ihre Frage beantwortet? Was ist das %w "Ding" in Ruby?

1430voto

sepp2k Punkte 352762

%w(foo bar) ist eine Abkürzung für ["foo", "bar"] . Das heißt, es ist eine Notation, um ein Array von Strings zu schreiben, die durch Leerzeichen anstelle von Kommas und ohne Anführungszeichen voneinander getrennt sind. Eine Liste von Möglichkeiten, Literale zu schreiben, finden Sie unter zenspider's quickref .

588voto

Mike Woodhouse Punkte 50241

Ich denke an %w() als "Wort-Array" - die Elemente sind durch Leerzeichen voneinander getrennt, und es wird ein Array von Zeichenketten zurückgegeben.

Hier sind alle %-Literale :

  • %w() Array von Zeichenketten
  • %r() regulärer Ausdruck.
  • %q() String
  • %x() ein Shell-Befehl (der die Ausgabezeichenfolge zurückgibt)
  • %i() Array von Symbolen (Ruby >= 2.0.0)
  • %s() Symbol
  • %() (ohne Buchstabe) Abkürzung für %Q()

Die Begrenzungszeichen ( y ) kann durch eine Vielzahl von Varianten ersetzt werden, wie z.B. [ y ] , | , ! , usw.

Bei Verwendung eines Großbuchstabens %W() können Sie die String-Interpolation verwenden #{variable} ähnlich wie bei der " y ' String-Begrenzer. Diese Regel gilt auch für alle anderen %-Literale.

abc = 'a b c'
%w[1 2#{abc} d] #=> ["1", "2\#{abc}", "d"]
%W[1 2#{abc} d] #=> ["1", "2a b c", "d"]

61voto

Eraden Punkte 2708

Außerdem gibt es %s mit dem Sie zum Beispiel beliebige Symbole erstellen können:

%s|some words|          #Same as :'some words'
%s[other words]         #Same as :'other words'
%s_last example_        #Same as :'last example'

Seit Ruby 2.0.0 haben Sie auch:

%i( a b c )   # => [ :a, :b, :c ]
%i[ a b c ]   # => [ :a, :b, :c ]
%i_ a b c _   # => [ :a, :b, :c ]
# etc...

34voto

Evan Meagher Punkte 4307

%W y %w können Sie ein Array von Zeichenketten erstellen, ohne Anführungszeichen und Kommas zu verwenden.

28voto

Mark C Punkte 595

Obwohl es sich um einen alten Beitrag handelt, taucht die Frage immer wieder auf und die Antworten scheinen mir nicht immer klar zu sein, daher hier meine Gedanken:

%w y %W sind Beispiele für allgemein abgegrenzte Eingaben Typen die sich auf Arrays beziehen. Es gibt andere Typen, die Folgendes umfassen %q , %Q , %r , %x y %i .

Der Unterschied zwischen der Version mit Groß- und Kleinbuchstaben besteht darin, dass sie uns Zugang zu den Funktionen von einfachen und doppelten Anführungszeichen gibt. Mit einfachen Anführungszeichen und (Kleinbuchstaben) %w haben wir keine Code-Interpolation ( #{someCode} ) und eine begrenzte Anzahl von Escape-Zeichen, die funktionieren ( \\ , \n ). Mit doppelten Anführungszeichen und (Großbuchstaben) %W wir faire Zugang zu diesen Funktionen haben.

Als Begrenzungszeichen kann ein beliebiges Zeichen verwendet werden, nicht nur die offene Klammer. Spielen Sie mit den obigen Beispielen, um zu sehen, wie sich das auswirkt.

Für einen ausführlichen Bericht mit Beispielen von %w und die vollständige Liste, Escape-Zeichen und Begrenzungszeichen, finden Sie unter " Ruby - %w gegen %W - Geheimnisse gelüftet! "

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X