我在看FileUtils的文档。

我被下面这句话弄糊涂了:

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

%w是什么意思?你能给我指一下文件吗?


当前回答

节选自http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings:上的Percent Strings文档

除了创建String类型的%(…),%还可以创建其他类型的对象。与字符串一样,大写字母允许插补和转义字符,而小写字母禁止它们。 这些是ruby中百分比字符串的类型: ... %w:字符串数组

其他回答

我从用户全名的CSV电子表格中获得了一堆列,我需要保持格式,并使用空格。我发现在使用ruby时最简单的方法是这样做:

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

这突出显示%()创建了一个像“Porter Smith\nJimmyJones\nRonald Jackson”这样的字符串,为了得到数组,您将“\n”[“Porter Smith”,“JimmyJones”,“Ronald Jackson”]分开字符串

因此,为了回答OP的原始问题,他们也可以写%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';'),如果你想在最终数组输出中存在空格,而恰巧有空格。

%w(foo bar)是["foo", "bar"]的快捷键。这意味着它是一种用空格而不是逗号分隔的字符串数组的符号,并且它们周围没有引号。你可以在zenspider的quickref中找到一系列书写文字的方法。

%W和%W允许您在不使用引号和逗号的情况下创建字符串数组。

虽然这是一篇老文章,但问题不断出现,答案对我来说似乎并不清楚,所以,以下是我的想法:

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

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

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

关于%w和完整列表、转义字符和分隔符的完整示例,请参阅“Ruby - %w vs %w - secrets revealed!”

还有%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...