Question 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 la suivante: quelle est la différence?


43
2018-04-22 02:49


origine


Réponses:


%W traite les chaînes de caractères entre guillemets alors que %w les 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 rubis 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"]

61
2018-04-22 02:54



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.


5
2018-04-22 03:04



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"] 

2
2018-04-22 02:58