2011-09-08 26 views
106

これを行うためのよりクリーンな方法がありますか?シンボルの配列を作成

%w[address city state postal country].map(&:to_sym) 
#=> [:address, :city, :state, :postal, :country] 

私は%sは、私が望んで行われているだろう考え出しただろうが、それはしていません。括弧の間にあるすべてのものを取り、そこから大きなシンボルを1つ作ります。

ちょっと迷惑です。

+0

「dir ty 'これについて? –

+1

それはかなり標準です。この方法を望ましくないものにする実装について何かありますか? – dwhalen

+4

"本当に"ではありませんが、Railsはしばしばこのような構文的な砂糖を持っています。 :) – Drew

答えて

309

私は11月9日に元の答えを返しましたが、starting from Ruby 2.0という記号の配列を作成する方法があります。これはリテラルです:

%i(address city state postal country) 

正確に何をしますか? (ルビー2.0の後)空白で区切られたシンボルの非補間アレイ、

%I[ ]

(ルビー2.0の後)空白で区切られたシンボルの補間された配列、

%i[address city state postal country]

+0

恐ろしい!このような何かが最終的に現れるでしょう。 – Drew

+7

更新するだけです。これはRuby 2.0.0の一部です –

+3

"to_sym"の代わりに "intern"の略であることを常に忘れています。 http://www.codecademy.com/forum_questions/512a675cf116c52d0d00674b – A5308Y

82

リテラルになる危険性があるため、シンボルの配列を作成する最もクリーンな方法は、シンボルの配列を使用することです。

fields = [:address, :city, :state, :postal, :country] 

これ以上は簡潔であるとは考えられません。

+4

+1、シンプルでストレートポイントを参照してください。 –

+9

「あまりにもリテラルな」という意味ですか? –

+0

私は常に物事を行う最も強力で簡潔な方法を見つけて使うのが好きです。この回答は実際にはこの特定のリストのための私のものよりもキーストロークが少ないですが、〜9個以上のアイテムのリストでは、代替が短くなります。答えをありがとう。 :) – Drew

0

%i[ ]クリーンな方法これを行うには:

%w[address city state postal country].map(&:to_sym)

関連する問題