Рубиновые массивы:% w против% W - PullRequest
145 голосов
/ 27 марта 2009

В чем разница?

Ответы [ 6 ]

223 голосов
/ 27 марта 2009

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

irb(main):001:0> foo="hello"
=> "hello"
irb(main):002:0> %W(foo bar baz #{foo})
=> ["foo", "bar", "baz", "hello"]
irb(main):003:0> %w(foo bar baz #{foo})
=> ["foo", "bar", "baz", "\#{foo}"]
28 голосов
/ 09 января 2012

Приложение, которое я нашел для% W против% w:

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]
21 голосов
/ 27 марта 2009

% W выполняет нормальные замены в двойных кавычках. % w нет.

10 голосов
/ 29 мая 2014

Несмотря на старый пост, вопрос продолжает появляться, и ответы не всегда кажутся мне ясными. Итак, вот мои мысли.

% w и% W являются примерами ввода с общим разделителем типов , которые относятся к массивам. Есть и другие типы, которые включают% q,% Q,% r,% x и% i.

Разница между прописными и строчными буквами в том, что она дает нам доступ к функциям одинарных и двойных кавычек. С одинарными кавычками и строчными буквами% w у нас нет интерполяции кода (например, # {someCode}) и ограниченный диапазон управляющих символов (например, \, \ n). С двойными кавычками и прописными буквами% W у нас do есть доступ к этим функциям.

В качестве разделителя может использоваться любой символ, а не только открытая скобка. Поиграйте с примерами выше, чтобы убедиться в этом.

Для полной записи с примерами% w и полного списка, escape-символов и разделителей - взгляните на: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed.html

Mark

3 голосов
/ 12 апреля 2015

Документация для строк процентов: http://ruby -doc.org / core-2.2.0 / doc / syntax / literals_rdoc.html # label-Percent + Strings

1 голос
/ 04 ноября 2015

%W используется для элементов массива в двойных кавычках, таких как %Q, например,

foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]

%w используется для элементов массива в одинарных кавычках, таких как %q.

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...