В чем разница?Рубиновые массивы:% w против% W
ответ
% 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 тоже. Правильно ли это? – Foton
Да. При печати вывода Ruby всегда использует двойные кавычки и выдает символы типа '#'. '' # {foo} ''и' "\ # {foo}" 'дает вам ту же строку, которую вы можете проверить с помощью' '# {foo}' ==" \ # {foo} "' in 'irb' , –
Это немного запутанно на первый взгляд, но спасибо за объяснение. – Foton
% W выполняет обычные замены двойной кавычки. % w нет.
Хотя старый пост, вопрос продолжают поступать и ответы не всегда кажутся ясными для меня. Итак, вот мои мысли.
% w и% W являются примерами разделенных на общий ввод типов, которые относятся к массивам. Существуют и другие типы, которые включают% q,% Q,% r,% x и% i.
Разница между верхним и нижним регистром заключается в том, что она дает нам доступ к особенностям одиночной и двойной кавычек. При одинарных кавычках и нижнем регистре% w мы не используем интерполяцию кода (например, # {someCode}) и ограниченный диапазон управляющих символов, которые работают (например, \, \ n). С двойными кавычками и прописными буквами% W мы имеем do.
Используемый разделитель может быть любым символом, а не только открытой круглой скобкой. Играйте с приведенными выше примерами, чтобы увидеть, что это действительно так.
Целых пишут с примерами% вес и полный список, избежать символов и разделителей - посмотреть на: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed.html
Марк
Документация на процент строк: http://ruby-doc.org/core-2.2.0/doc/syntax/literals_rdoc.html#label-Percent+Strings
%W
используется для элементов с двойными кавычками, таких как %Q
, например
foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]
%w
используется для элементов с одной кавычкой, таких как %q
.
%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]
«% w» - это моя обычная реплика для людей, которые слишком сильно сомневаются в удобочитаемости Ruby. Работает каждый раз. –
теперь у вас есть еще лучший ответ :-) – errata
Как нерелевантная сторона примечания, URL-адрес этого вопроса несколько смутил меня, пока страница загружалась. –