%w(array)是什么意思?

FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'

答案

%w(foo bar)["foo", "bar"]的快捷方式。意思是写一个用空格而不是逗号分隔且不加引号的字符串数组。您可以在zenspider 的 quickref 中找到编写文字的方法列表。

我认为%w()是一个 “单词数组”- 元素由空格分隔,它返回一个字符串数组。

还有其他%文字:

  • %r()是编写正则表达式的另一种方法。
  • %q()是写单引号字符串的另一种方式(可以是多行,这很有用)
  • %Q()给出一个双引号字符串
  • %x()是一个 shell 命令
  • %i()给出了一个符号数组(Ruby> = 2.0.0)
  • %s()foo转换为符号( :foo

我不认识其他人,但那里可能潜伏着……

还有%s允许您创建任何符号,例如:

%s|some words|          #Same as :'some words'
%s[other words]         #Same as :'other words'
%s_last example_        #Same as :'last example'

从 Ruby 2.0.0 开始,您还拥有:

%i( a b c )   # => [ :a, :b, :c ]
%i[ a b c ]   # => [ :a, :b, :c ]
%i_ a b c _   # => [ :a, :b, :c ]
# etc...

%W%w允许您创建字符串数组,而无需使用引号和逗号。

尽管这是一个过时的帖子,但问题不断出现,答案对我而言似乎并不总是那么清楚,因此,这是我的想法:

%w%W是与数组有关的常规定界输入类型的示例。还有其他类型,包括%q%Q%r%x%i

大写和小写版本之间的区别在于,它使我们能够使用单引号和双引号的功能。使用单引号和(小写) %w ,我们没有代码插值( #{someCode} )和有效的转义字符范围有限( \\\n )。用双引号和(大写) %W ,我们可以使用这些功能。

所使用的定界符可以是任何字符,而不仅仅是圆括号。使用上面的示例可以看到效果。

要获得有关%w以及完整列表,转义字符和分隔符的示例的完整文章,请查看 “ Ruby-%w vs%W –透露的秘密!

代替%w()我们应该使用%w[]

根据 Ruby 样式指南:

当您需要一个单词数组(其中没有空格和特殊字符的非空字符串)时,最好使用%w 而不是文字数组语法。仅将此规则应用于具有两个或更多元素的数组。

# bad
STATES = ['draft', 'open', 'closed']

# good
STATES = %w[draft open closed]

请使用最适合各种百分比文字的花括号。

[]用于数组文字( %w, %i, %W, %I ),因为它与标准数组文字对齐。

# bad
%w(one two three)
%i(one two three)

# good
%w[one two three]
%i[one two three]

欲了解更多信息,请点击这里

摘自http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings 的百分比字符串文档:

除了%(...)创建字符串之外,%还可以创建其他类型的对象。与字符串一样,大写字母允许插值和转义字符,而小写字母则禁用它们。

这些是 Ruby 中百分比字符串的类型:
...
%w :字符串数组

我从 CSV 电子表格中获得了一堆包含用户全名的列,我需要保留格式,并留有空格。我发现使用红宝石时最简单的方法是:

names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')

这突出显示了%()创建了一个类似于"Porter Smith\nJimmyJones\nRonald Jackson"的字符串,并通过将字符串split"\n" ["Porter Smith", "Jimmy Jones", "Ronald Jackson"]来获得数组。

为了回答这些 OP 的原来的问题也一样,他们可以写%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')如果碰巧space ,当你想要的space存在于最终的数组输出。