Reputation: 15408
Is there a cleaner way to do something like this?
%w[address city state postal country].map(&:to_sym)
#=> [:address, :city, :state, :postal, :country]
I would have figured %s
would have done what I wanted, but it doesn't. It just takes everything between the brackets and makes one big symbol out of it.
Just a minor annoyance.
Upvotes: 151
Views: 71175
Reputation: 7598
The original answer was written back in September '11, but, starting from Ruby 2.0, there is a shorter way to create an array of symbols! This literal:
%i[address city state postal country]
will do exactly what you want.
Upvotes: 398
Reputation: 773
%i[ ]
Non-interpolated Array of symbols, separated by whitespace (after Ruby 2.0)
%I[ ]
Interpolated Array of symbols, separated by whitespace (after Ruby 2.0)
%i[address city state postal country]
the cleanest way to do this is:
%w[address city state postal country].map(&:to_sym)
Upvotes: 3
Reputation: 7598
With a risk of becoming too literal, I think the cleanest way to construct an array of symbols is using an array of symbols.
fields = [:address, :city, :state, :postal, :country]
Can't think of anything more concise than that.
Upvotes: 103