Ich schaue mir 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 das %w
? Können Sie mich auf die Dokumentation verweisen?
%w(foo bar)
ist eine Abkürzung für ["foo", "bar"]
. Das heißt, es ist eine Notation, ein Array von Zeichenfolgen zu schreiben, die durch Leerzeichen anstelle von Kommas und ohne Anführungszeichen getrennt sind. Eine Liste der Möglichkeiten zum Schreiben von Literalen finden Sie in zenspiders Quickref .
%w(ab\ c def) # => ["ab c", "def"]
ich denke an
%w()
ein "Wortarray" vor - die Elemente werden durch Leerzeichen begrenzt und es wird ein Array von Zeichenfolgen zurückgegeben.Es gibt andere% Literale:
%r()
ist eine andere Möglichkeit, einen regulären Ausdruck zu schreiben.%q()
ist eine andere Möglichkeit, eine Zeichenfolge in einfachen Anführungszeichen zu schreiben (und kann mehrzeilig sein, was nützlich ist).%Q()
gibt eine Zeichenfolge in doppelten Anführungszeichen%x()
ist ein Shell-Befehl%i()
gibt eine Reihe von Symbolen an (Ruby> = 2.0.0)%s()
verwandelt sichfoo
in ein Symbol (:foo
)Ich kenne keine anderen, aber vielleicht lauern dort einige herum ...
quelle
%i()
ein Array von Symbolen generieren.%()
(oder%[]
oder%{}
), das eine doppelte Anführungszeichenfolge gibt und doppelte Anführungszeichen wie z%Q()
. ZB%("sender name" <[email protected]>) # => "\"sender name\" <[email protected]>"
Dort
%s
können Sie auch beliebige Symbole erstellen, zum Beispiel:Seit Ruby 2.0.0 haben Sie auch:
quelle
%W
und%w
ermöglichen es Ihnen, ein Array von Zeichenfolgen ohne Anführungszeichen und Kommas zu erstellen.quelle
Obwohl es sich um einen alten Beitrag handelt, tauchen immer wieder Fragen auf und die Antworten scheinen mir nicht immer klar zu sein. Hier sind meine Gedanken:
%w
und%W
sind Beispiele für allgemein begrenzte Eingabetypen , die auf Arrays beziehen. Es gibt andere Arten , die einschließen%q
,%Q
,%r
,%x
und%i
.Der Unterschied zwischen der 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 (#{someCode}
) und einen begrenzten Bereich von Escape-Zeichen, die funktionieren (\\
,\n
). Mit doppelten Anführungszeichen und (Großbuchstaben) tun%W
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
%w
und der vollständigen Liste, Escape-Zeichen und Trennzeichen finden Sie unter " Ruby -% w vs% W - Geheimnisse enthüllt! "quelle
Anstelle von
%w()
sollten wir verwenden%w[]
Laut Ruby Style Guide:
Ziehen Sie% w der Literal-Array-Syntax vor, wenn Sie ein Array von Wörtern benötigen (nicht leere Zeichenfolgen ohne Leerzeichen und Sonderzeichen). Wenden Sie diese Regel nur auf Arrays mit zwei oder mehr Elementen an.
Verwenden Sie die geschweiften Klammern, die für die verschiedenen Arten von Prozentliteralen am besten geeignet sind.
[]
für Array-Literale (%w, %i, %W, %I
), da diese mit den Standard-Array-Literalen ausgerichtet sind.Weitere Informationen finden Sie hier .
quelle
Auszug aus der Dokumentation zu Percent Strings unter http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
quelle
Ich erhielt eine Reihe von Spalten aus einer CSV-Tabelle mit vollständigen Benutzernamen und musste die Formatierung mit Leerzeichen beibehalten. Der einfachste Weg, sie bei der Verwendung von Rubin zu finden, war:
Dies hebt hervor, dass
%()
eine Zeichenfolge wie erstellt wird"Porter Smith\nJimmyJones\nRonald Jackson"
und um das Array zu erhalten, auf dem Siesplit
die Zeichenfolge haben"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Um auch die ursprüngliche Frage des OP zu beantworten, hätten sie schreiben können,
%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
ob es einenspace
Zeitpunkt gab, an dem Sie möchten, dass derspace
in der endgültigen Array-Ausgabe vorhanden ist.quelle