Quelle est la différence entre% w {} et% W {} majuscules et minuscules pourcentage W littéraux de tableau dans Ruby?

%w[ ] Non-interpolated Array of words, separated by whitespace %W[ ] Interpolated Array of words, separated by whitespace 

Usage:

 p %w{one one two three 0 1 1 2 3} # = > ["one", "one", "two", "three", "0", "1", "1", "2", "3"] p %W{one one two three 0 1 1 2 3} # = > ["one", "one", "two", "three", "0", "1", "1", "2", "3"] p %w{C:\ C:\Windows} # => ["C: C:\\Windows"] p %W{C:\ C:\Windows} # => ["C: C:Windows"] 

Ma question est … quelle est la différence?

%W traite les chaînes entre guillemets, tandis que %w traite comme des guillemets simples (et n’interpolera donc pas les expressions ni les nombreuses séquences d’échappement). Essayez à nouveau vos tableaux avec des expressions rbuy et vous verrez une différence.

EXEMPLE:

 myvar = 'one' p %w{#{myvar} two three 1 2 3} # => ["\#{myvar}", "two", "three", "1", "2", "3"] p %W{#{myvar} two three 1 2 3} # => ["one", "two", "three", "1", "2", "3"] 

Sautons la confusion du tableau et parlons d’interpolation contre none:

 irb(main):001:0> [ 'foo\nbar', "foo\nbar" ] => ["foo\\nbar", "foo\nbar"] irb(main):002:0> [ 'foo\wbar', "foo\wbar" ] => ["foo\\wbar", "foowbar"] 

La différence de comportement est cohérente avec le comportement des chaînes entre guillemets simples et entre guillemets.

Voici un exemple pour répondre à:

 ruby-1.8.7-p334 :033 > @foo = 'bar' => "bar" ruby-1.8.7-p334 :034 > %w(#{@foo}) => ["\#{@foo}"] ruby-1.8.7-p334 :035 > %W(#{@foo}) => ["bar"]