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?

25voto

Rajkaran Mishra Punkte 4014

Anstelle von %w() sollten wir %w[]

Gemäß dem Ruby Style Guide:

Ziehen Sie %w der literalen Array-Syntax vor, wenn Sie ein Array von Wörtern (nicht leere Zeichenketten ohne Leerzeichen und Sonderzeichen) benötigen. Wenden Sie diese Regel nur auf Arrays mit zwei oder mehr Elementen an.

# bad
STATES = ['draft', 'open', 'closed']

# good
STATES = %w[draft open closed]

Verwenden Sie die Klammern, die für die verschiedenen Arten von Prozentliteralen am besten geeignet sind.

[] für Array-Literale( %w, %i, %W, %I ), da es an den Standard-Array-Literalen ausgerichtet ist.

# bad
%w(one two three)
%i(one two three)

# good
%w[one two three]
%i[one two three]

Für mehr lesen aquí .

13voto

itsnikolay Punkte 16062

Ein Auszug aus der Dokumentation für Percent Strings unter http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Saiten :

Neben %(...), das einen String erzeugt, kann das % auch andere Objekttypen erzeugen. Wie bei Strings erlaubt ein Großbuchstabe Interpolation und escapete Zeichen, während ein Kleinbuchstabe diese ausschaltet.

Dies sind die Arten von Prozentzeichenfolgen in Ruby:
...
%w : Array von Strings

1voto

pjammer Punkte 9217

Ich habe eine Reihe von Spalten aus einem CSV-Arbeitsblatt mit den vollständigen Namen von Benutzern erhalten und musste die Formatierung mit Leerzeichen beibehalten. Der einfachste Weg, den ich gefunden habe, um sie in mit Ruby zu bekommen, war zu tun:

names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')

Dies zeigt, dass %() erzeugt eine Zeichenkette wie "Porter Smith\nJimmyJones\nRonald Jackson" und um das Array zu erhalten, müssen Sie split die Zeichenfolge auf dem "\n" ["Porter Smith", "Jimmy Jones", "Ronald Jackson"]

Um also auch die ursprüngliche Frage des Auftraggebers zu beantworten, hätten sie schreiben können %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';') wenn es zufällig space wenn Sie die space in der endgültigen Array-Ausgabe zu finden.

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