В чем разница?
В чем разница?
Ответы:
% 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}"]
#
. '#{foo}'
и "\#{foo}"
дать вам ту же строку, которую можно проверить с '#{foo}' == "\#{foo}"
в irb
.
Несмотря на старый пост, вопрос продолжает появляться, и ответы не всегда кажутся мне ясными. Итак, вот мои мысли.
% 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
отметка
%w&readable af&
Документация для строк процентов: 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}"]