Answers:
%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}"]
#
。'#{foo}'
并"\#{foo}"
提供相同的字符串,您可以'#{foo}' == "\#{foo}"
在中进行验证irb
。
我为%W与%w找到的应用程序:
greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]
greetings = %w(hi hello how\ do\ you\ do)
尽管是旧文章,但问题不断出现,答案对我而言并不总是很清楚。所以,这就是我的想法。
%w和%W是与数组有关的常规定界输入类型的示例。还有其他类型,包括%q,%Q,%r,%x和%i。
大写和小写之间的区别在于,它使我们能够使用单引号和双引号的功能。使用单引号和小写%w时,我们没有代码插值(例如#{someCode}),并且有效的转义字符范围有限(例如\,\ n)。用双引号和大写%W我们做可以使用这些功能。
所使用的定界符可以是任何字符,而不仅仅是圆括号。使用上面的示例可以看到效果。
有关%w和完整列表示例的完整写作,转义字符和定界符-请查看:http : //cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html
标记
%w&readable af&
%W
用于双引号数组元素%Q
,例如,
foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]
%w
用于单引号的数组元素,例如%q
。
%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]