Ruby数组:%w vs%W


Answers:


233

%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}"]

您的示例也显示了%w的双引号。这是正确的吗?
福田

是。在输出输出时,Ruby始终使用双引号并转义字符#'#{foo}'"\#{foo}"提供相同的字符串,您可以'#{foo}' == "\#{foo}"在中进行验证irb
布莱恩·坎贝尔

初看时有点困惑,但感谢您的解释。
福田

29

我为%W与%w找到的应用程序:

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

12
虽然在这种情况下,可能更容易做到greetings = %w(hi hello how\ do\ you\ do)
dinjas 2014年


11

尽管是旧文章,但问题不断出现,答案对我而言并不总是很清楚。所以,这就是我的想法。

%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

标记


1
那是一篇好文章。我没有意识到您可以用相同的方式制作字符串或其他东西,而包围的字符可以是您想要的任何东西。例如,%w&readable af&
Dex


1

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

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

%w用于单引号的数组元素,例如%q

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

0
array = %w(a b c d) 

和...一样

array = ["a", "b", "c", "d"]

%w 是字符串引号的快捷符号!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.