有何不同之处?
%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}"
会给你相同的字符串,你可以在irb
中通过'#{foo}' == "\#{foo}"
来验证。 - Brian Campbell我发现了一个使用 %W 和 %w 的应用:
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})和适用的转义字符范围受限(例如\、\n)。而对于双引号和大写的%W,我们可以使用这些功能。
用于分隔符的字符可以是任何字符,而不仅仅是开放括号。尝试上面的示例,以查看其效果。
关于%w和完整列表、转义字符和分隔符的示例,请完整阅读:http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed.html
Mark
%w&readable af&
。 - Dex百分号字符串文档: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}"]
array = %w(a b c d)
同样的
array = ["a", "b", "c", "d"]
%w
是字符串中引号的快捷符号!