В чем разница между% w {} и% W {} литералами массива процентов W верхнего и нижнего регистра в Ruby? - PullRequest
47 голосов
/ 22 апреля 2011
%w[ ]   Non-interpolated Array of words, separated by whitespace
%W[ ]   Interpolated Array of words, separated by whitespace

Использование:

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

Мой вопрос ... в чем разница?

Ответы [ 3 ]

68 голосов
/ 22 апреля 2011

%W обрабатывает строки как двойные кавычки, тогда как %w обрабатывает их как одинарные кавычки (и, следовательно, не будет интерполировать выражения или многочисленные escape-последовательности).Попробуйте свои массивы снова с выражениями ruby, и вы увидите разницу.

ПРИМЕР:

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"]
5 голосов
/ 22 апреля 2011

Давайте пропустим путаницу в массиве и поговорим о интерполяции, а не об отсутствии:

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

Различие в поведении согласуется с тем, как ведут себя строки в одинарных и двойных кавычках.

1 голос
/ 07 мая 2019

Чтобы продемонстрировать случай с интерполяцией и escape-последовательностью для обоих литералов, мы предполагаем, что:

>> a = 'a'
=> "a"

Нижний регистр %w процентное значение:

>> %w[a#{a} b#{'b'} c\ d \s \']
=> ["a\#{a}", "b\#{'b'}", "c d", "\\s", "\\'"]
  • обрабатывает все поставляемые слова в скобках как одинарные кавычки Строки
  • не не интерполирует Строки
  • не не экранирует последовательности
  • только экранирует пробелы \

Прописные буквы %W процентное значение:

>> %W[a#{a} b#{'b'} c\ d \s \']
=> ["aa", "bb", "c d", " ", "'"]
  • обрабатывает все поставляемые слова в скобках как двойные кавычки Строки
  • позволяет String интерполяция
  • экранирует последовательности
  • также избегает пробелов \

Источник: В чем разница между литералами массива% w и% W в Ruby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...