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

153

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

Allyn
источник
18
«% w» - моя обычная реплика людям, которые слишком взволнованы по поводу читаемости Ruby. Работает каждый раз.
Крейг Stuntz
теперь у вас есть еще лучший ответ :-)
опечатки
6
Как нерелевантное примечание, URL-адрес этого вопроса некоторое время смущал меня во время загрузки страницы.
Фонд Моника иск

Ответы:

233

% 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}"]
Брайан Кэмпбелл
источник
Ваш пример показывает двойные кавычки для% w тоже. Это правильно?
Фотон
Да. При выводе на печать Ruby всегда использует двойные кавычки и экранирует символы вроде #. '#{foo}'и "\#{foo}"дать вам ту же строку, которую можно проверить с '#{foo}' == "\#{foo}"в irb.
Брайан Кэмпбелл
Это немного сбивает с толку на первый взгляд, но спасибо за объяснение.
Фотон
29

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

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]
aaandre
источник
12
Хотя в этом случае это проще сделатьgreetings = %w(hi hello how\ do\ you\ do)
dinjas
21

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

Брайан
источник
11

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

% 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

отметка

Марк С
источник
1
Это хорошая статья. Я не осознавал, что вы можете создавать строки или другие вещи таким же образом, и включающие символы могут быть любыми. Например,%w&readable af&
Декс
1

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

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

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

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]
Фарук Хоссен
источник
0
array = %w(a b c d) 

Такой же как

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

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

Kasem007
источник