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.

m_x
quelle
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

David Grayson
quelle
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
Gareth
quelle
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