Рубиновые массивы:% w против% W

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

Ответ 1

% w цитируется как одинарные кавычки '' (без переменной интерполяции, меньше управляющих последовательностей), а% 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}"]

Ответ 2

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

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]

Ответ 3

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

Ответ 4

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

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

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

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

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

Марк

Ответ 6

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

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

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

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]

Ответ 7

array = %w(a b c d) 

То же, что и

array = ["a", "b", "c", "d"]

%w - это сокращенный символ для кавычки в строке!