it-swarm.com.de

Was bedeutet% w (Array)?

Ich suche in der Dokumentation für FileUtils. Die folgende Zeile verwirrt mich:

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

Was bedeutet der %w? Können Sie mich auf die Dokumentation verweisen?

791
Dane O'Connor

%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 anstatt durch Kommas und ohne Anführungszeichen voneinander getrennt sind. Eine Liste der Schreibweisen für Literale finden Sie in zenspiders quickref .

1174
sepp2k

Ich stelle %w() als "Word-Array" 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, einen String in Anführungszeichen zu schreiben (und kann auch mehrzeilig sein, was nützlich ist)
  • %Q() gibt einen String in doppelten Anführungszeichen an
  • %x() ist ein Shell-Befehl
  • %i() gibt ein Array von Symbolen aus (Ruby> = 2.0.0)
  • %s() verwandelt foo in ein Symbol (:foo)

Ich kenne keine anderen, aber vielleicht lauern dort einige herum ...

445
Mike Woodhouse

Es gibt auch %s, mit dem Sie beliebige Symbole erstellen können, zum Beispiel:

%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...
58
Eraden

%W_ UND _%w ermöglichen das Erstellen eines Arrays von Zeichenfolgen ohne Anführungszeichen und Kommas.

31
Evan Meagher

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

%w und %W sind Beispiele für generell begrenzte Eingabetypen , die sich auf Arrays beziehen. Es gibt andere Typen, die %q, %Q, %r, %x und %i enthalten.

Der Unterschied zwischen der Groß- und Kleinschreibung besteht darin, dass wir auf die Funktionen von einfachen und doppelten Anführungszeichen zugreifen können. 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 (in Großbuchstaben) %W haben wir Zugriff auf diese Funktionen.

Das Trennzeichen kann ein beliebiges Zeichen sein, nicht nur die offene Klammer. Spielen Sie mit den obigen Beispielen, um die Wirkung zu sehen.

Für einen vollständigen Bericht mit Beispielen für %w und der vollständigen Liste, Escape-Zeichen und Trennzeichen, schauen Sie sich " Ruby -% w vs% W - Geheimnisse enthüllt! " an.

19
Mark C

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

Laut Ruby Styleguide:

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.

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

# good
STATES = %w[draft open closed]

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

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

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

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

Für mehr lesen Sie hier .

14
Rajkaran Mishra

Auszug aus der Dokumentation zu Percent Strings unter http://Ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :

Neben% (...), das einen String erzeugt, können die% andere Objekttypen erzeugen. Wie bei Zeichenfolgen ermöglicht ein Großbuchstabe die Interpolation und das Entstehen von Zeichen, während ein Kleinbuchstabe diese deaktiviert.

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

11
itsnikolay

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 mit Ruby zu bekommen, war:

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

Dies hebt hervor, dass %() eine Zeichenfolge wie _"Porter Smith\nJimmyJones\nRonald Jackson"_ erstellt und um das Array zu erhalten, split die Zeichenfolge auf dem _"\n"["Porter Smith", "Jimmy Jones", "Ronald Jackson"]_

Um auch die ursprüngliche Frage des OP zu beantworten, hätten sie %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';') schreiben können, wenn es space gegeben hätte, wenn space in der endgültigen Array-Ausgabe vorhanden sein soll.

2
pjammer