Ruby 数组:% w vs% W

有什么区别吗?

44374 次浏览

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

% 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 vs% w 找到的一个应用程序:

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

虽然这是一篇老文章,但问题不断出现,而答案对我来说并不总是那么清晰。我是这么想的。

% w 和% W 是通用分隔输入 类别的例子,它们与数组相关。还有其他类型,包括% q、% Q、% r、% x 和% i。

大写和小写的区别在于,它使我们能够访问单引号和双引号的特征。使用单引号和小写的% w,我们没有代码插值(例如 # { some Code })和有限的转义字符范围(例如 n)。使用双引号和大写% W,我们 可以访问这些特性。

所使用的分隔符可以是任何字符,而不仅仅是开括号。通过上面的例子可以看到效果。

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

马克

%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是一个快捷的符号,用于引号到字符串!