Gibt es eine wörtliche Notation für eine Reihe von Symbolen?


170

Ich mag diesen wörtlichen Ausdruck für eine Reihe von Zeichenfolgen:

%w( i can easily create arrays of words )

Ich frage mich, ob es ein Literal gibt, um eine Reihe von Symbolen zu erhalten. Ich weiß, dass ich es kann

%w( it is less elegant to create arrays of symbols ).map( &:to_sym )

aber es wäre so wunderbar, nur ein wörtliches Wort zu verwenden.


Dieser Ansatz wäre schöner, als nur eine Reihe von Symbolen zu erstellen? Oder eine einfache Methode? Meh.
Dave Newton

Worum geht es in diesem Fall überhaupt bei der %wNotation?
m_x

IMO ist ein Array von Symbolen weniger überladen als ein Array von Zeichenfolgen und im Allgemeinen weniger verbreitet. YMMV.
Dave Newton

<troll> scheint, dass das Ruby-Team mir seit Ruby 2 zugestimmt hat ... </
control

3
Mögliches Duplikat von Array von Symbolen erstellen
sjakobi

Antworten:


277

Ja! Dies ist jetzt in Ruby 2.0.0 möglich. Eine Möglichkeit, es zu schreiben, ist:

%i{foo bar}  # => [:foo, :bar]

Sie können auch andere Trennzeichen verwenden, um auch zu schreiben %i(foo bar)oder %i!foo bar!zum Beispiel.

Diese Funktion wurde ursprünglich hier angekündigt:

http://www.ruby-lang.org/zh_TW/news/2012/11/02/ruby-2-0-0-preview1-released/

Es wird in der offiziellen Dokumentation von Ruby hier erwähnt:

http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings


3
danke, @ MarcelJackwerth hat es bereits in einem Kommentar zu der zuvor akzeptierten Antwort angegeben, aber ich werde deine für die Nachwelt akzeptieren.
m_x

3
Beachten Sie, dass wie bei anderen Modifikatoren eine Reihe anderer Trennzeichen verwendet werden können. zB %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833

1
Wenn Sie die Unterstützung dafür in TextMate oder Sublime Text hervorheben möchten, lesen Sie meine geänderte .tmLanguage-Datei in dieser Übersicht .
Ben Kreeger

1
Laut Rubocop wird empfohlen, %i[foo bar]
Mapad

26

In Ruby 1.x ist die Liste der verfügbaren % -Deimiter leider begrenzt

Modifier    Meaning
%q[ ]       Non-interpolated String (except for \\ \[ and \])
%Q[ ]       Interpolated String (default)
%r[ ]       Interpolated Regexp (flags can appear after the closing delimiter)
%s[ ]       Non-interpolated Symbol
%w[ ]       Non-interpolated Array of words, separated by whitespace
%W[ ]       Interpolated Array of words, separated by whitespace
%x[ ]       Interpolated shell command

Schade ... danke für den Link und die Liste. wusste nicht %x, scheint besser lesbar als die Backticks-Notation, die ich benutze
m_x

3
Nun, nicht so unglücklich für diejenigen, die die vorhandenen kaum im Kopf behalten können (das wäre ich).
tokland

26
In Ruby 2.0 erhalten wir% i für Symbol-Arrays, siehe: ruby-lang.org/zh_TW/news/2012/11/02/…
Marcel Jackwerth
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.