我正在查看FileUtils的文档。
我对以下行感到困惑:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
什么%w
意思 您能指出我的文档吗?
我正在查看FileUtils的文档。
我对以下行感到困惑:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
什么%w
意思 您能指出我的文档吗?
Answers:
%w(foo bar)
是的快捷方式["foo", "bar"]
。意思是写一个用空格而不是逗号分隔且不加引号的字符串数组。您可以在zenspider的quickref中找到编写文字的方法列表。
%w(ab\ c def) # => ["ab c", "def"]
我认为这%w()
是一个“单词数组”-元素由空格分隔,并返回字符串数组。
还有其他%文字:
%r()
是写正则表达式的另一种方式。%q()
是写单引号字符串的另一种方法(可以是多行,这很有用)%Q()
给出双引号字符串%x()
是一个shell命令%i()
给出符号数组(Ruby> = 2.0.0)%s()
变成foo
符号(:foo
)我不认识其他人,但那里可能潜伏着……
%i()
用来生成符号数组。
%()
(或%[]
或%{}
)给出双引号引起来的字符串并转义双引号,例如%Q()
。例如%("sender name" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
%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]
请使用最适合各种百分比文字的花括号。
[]
用于数组literal(%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
在最终数组输出中存在该对象。