When to use %w?
以下两个语句将生成相同的结果:
1 | arr = %w(abc def ghi jkl) |
和
1 | arr = ["abc","def","ghi","jkl"] |
号
在哪些情况下应使用
在上面的例子中,我需要一个数组
何时使用
当你有一个单字列表要变成一个数组时,使用
如果有嵌入空白的元素可以欺骗
所以,当一个或另一个对你来说最有意义的时候,你可以选择使用它。这叫做"程序员的选择"。
这就是我记忆的方式:
%q/%q用于字符串
%Q用于双引号字符串(对于一个字符串中有多个引号字符时很有用)。
而不是这样做:
1 | "I said "Hello World"" |
号
你可以这样做:
1 | %Q{I said"Hello World"} |
%q表示单引号字符串(记住单引号字符串不支持字符串内插或转义序列,例如。.当我说不"支持"时,我的意思是单引号字符串将需要将转义序列作为特殊字符处理,换句话说,转义序列将只是字符串文字的一部分)
而不是这样做:
1 | ‘I said \’Hello World\’’ |
。
你可以这样做:
1 | %q{I said 'Hello World'} |
但请注意,如果字符串中有转义序列,则不会对其进行处理,而是将其视为文本反斜杠和N字符:
1 2 3 4 5 6 | result = %q{I said Hello World } =>"I said Hello World\ " puts result I said Hello World |
。
请注意,文本未被视为换行符,但它具有%q:
1 2 3 4 5 6 | result = %Q{I said Hello World } =>"I said Hello World " puts result I said Hello World |
。
%w/%w用于数组元素
%w用于双引号数组元素。这意味着它将支持字符串插值和转义序列:
而不是这样做:
1 2 3 | orange ="orange" result = ["apple","#{orange}","grapes"] => ["apple","orange","grapes"] |
您可以这样做:
1 2 3 4 5 6 7 8 | result = %W(apple #{orange} grapes ) => ["apple","orange","grapes "] puts result apple orange grapes |
。
请注意,转义序列导致葡萄后换行符中断。这不会发生在%w中。对单引号数组元素使用了%w。当然,单引号字符串不支持插值和转义序列。
而不是这样做:
1 | result = [‘a’, ‘b’, ‘c’] |
你可以这样做:
1 | result = %w{a b c} |
。
但是看看当我们这样做时会发生什么:
1 2 3 4 5 6 7 8 | result = %w{a b c } => ["a","b","c\ "] puts result a b c |
号
请记住,不要将这些构造与%x(用于运行unix命令的"backtick"的替代方法)、%r(用于//正则表达式语法的替代方法)以及最后的%s(用于符号)混淆。
使用
此外,还有更多类似的快捷方式:
1 2 3 4 5 | %W - double quotes %r - regular expression %q - single-quoted string %Q - double-quoted string %x - shell command |
有关详细信息,请参阅"%w(array)是什么意思?"
正如您正确指出的,它们产生相同的结果。因此,在决定时,选择一个产生更简单代码的代码。在这种情况下,它是