Ruby数组:%w vs%W

Ruby arrays: %w vs %W

有什么区别?


%w引号与单引号''相似(无变量插值,转义序列较少),而%w引号与双引号""相似。

1
2
3
4
5
6
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与%w找到的应用程序:

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


%w执行正常的双引号替换。%W没有。


虽然这是一篇老文章,但问题不断出现,我觉得答案并不总是很清楚。所以,这是我的想法。

%w和%w是与数组相关的常规分隔输入类型的示例。还有其他类型,包括%q、%q、%r、%x和%i。

大小写的区别在于它使我们能够访问单引号和双引号的功能。对于单引号和小写%w,我们没有代码插入(例如somecode)和有限范围的可工作转义字符(例如,)。使用双引号和大写%w,我们确实可以访问这些功能。

使用的分隔符可以是任何字符,而不仅仅是左括号。用上面的例子来看看效果。

有关完整的%w和完整列表示例的撰写,请参阅转义符和分隔符:http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-exploed.html

作记号


百分比字符串文档:http://ruby doc.org/core-2.2.0/doc/syntax/literals_rdoc.html label percent+strings


%W用于双引号数组元素,如%Q,例如,

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

%W用于单引号数组元素,如%Q

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