シンボルの配列の文字表記はありますか?


170

文字列の配列に対するこのリテラル式が好きです。

%w( i can easily create arrays of words )

シンボルの配列を取得するためのリテラルがあるかどうか疑問に思っています。私はできることを知っています

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

しかし、リテラルを使用するだけでとても素晴らしいでしょう。


このアプローチは、単にシンボルの配列を作成するよりも優れていますか?それとも簡単な方法ですか?ええ。
Dave Newton

この場合、%w表記のポイントは何ですか?
m_x 2012年

IMOシンボルの配列は、文字列の配列よりも雑然としておらず、一般的にあまり一般的ではありません。YMMV。
Dave Newton

<troll> ruby​​ 2以降、rubyチームが私に同意したようです... </ troll>
m_x 2013年

回答:


277

はい!これはRuby 2.0.0で可能になりました。それを書く一つの方法は:

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

他の区切り文字を使用することもできるため、たとえば%i(foo bar)%i!foo bar!を書くこともできます。

この機能はもともとここで発表されました:

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

Rubyの公式ドキュメントでここに言及されています:

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


3
おかげで、@ MarcelJackwerthは以前に受け入れられた回答のコメントで既にそれを述べましたが、私は後世のためにあなたを受け入れます。
m_x 2013年

3
他の修飾子と同様に、他の範囲の区切り文字を使用できることに注意してください。例えば%i[foo bar]%i{foo bar}%i!foo bar!%i%foo bar%
user664833 2014

1
TextMateまたはSublime Textでこれに対するサポートを強調表示したい場合は、この要点で変更した.tmLanguageファイルを確認しください。
Ben Kreeger、2014年

1
rubocopによれば、使用することをお勧めします%i[foo bar]
Mapad

26

Ruby 1.xでは、残念ながら使用可能な%区切り文字のリストが制限されています

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

残念ですが、リンクとリストに感謝します。知らなかった%x、私が使用しているバック
ティック

3
まあ、かろうじて既存のものを頭に留めておくことができる人たち(それは私でしょう)にとってはそれほど残念ではありません。
tokland '11

26
Rubyの2.0では、我々は、シンボル列のために%Iを取得する参照してください。ruby-lang.org/zh_TW/news/2012/11/02/...
マルセルJackwerth
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.