What does %w(array) mean? What does %w(array) mean? arrays arrays

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.

Here are all % literals:

  • %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...