What does %w(array) mean?
%w(foo bar)
is a shortcut for ["foo", "bar"]
. Meaning it's a notation to write an array of strings separated by spaces instead of commas and without quotes around them. You can find a list of ways of writing literals in zenspider's quickref.
I think of %w()
as a "word array" - the elements are delimited by spaces and it returns an array of strings.
%w()
array of strings%r()
regular expression.%q()
string%x()
a shell command (returning the output string)%i()
array of symbols (Ruby >= 2.0.0)%s()
symbol%()
(without letter) shortcut for%Q()
The delimiters (
and )
can be replaced with a lot of variations, like [
and ]
, |
, !
, etc.
When using a capital letter %W()
you can use string interpolation #{variable}
, similar to the "
and '
string delimiters. This rule works for all the other % literals as well.
abc = 'a b c'%w[1 2#{abc} d] #=> ["1", "2\#{abc}", "d"]%W[1 2#{abc} d] #=> ["1", "2a b c", "d"]
There is also %s
that allows you to create any symbols, for example:
%s|some words| #Same as :'some words'%s[other words] #Same as :'other words'%s_last example_ #Same as :'last example'
Since Ruby 2.0.0 you also have:
%i( a b c ) # => [ :a, :b, :c ]%i[ a b c ] # => [ :a, :b, :c ]%i_ a b c _ # => [ :a, :b, :c ]# etc...