我正在查看FileUtils的文档。 我对以下几行感到困惑:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
%w
是什么意思? 你能指点我的文件吗?
#1楼
%w(foo bar)
是["foo", "bar"]
的快捷方式。 这意味着它是一种表示字符串数组的符号,这些字符串由空格而不是逗号分隔,并且没有引号。 您可以在zenspider的quickref中找到编写文字的方法列表。
#2楼
%W
和%w
允许您创建字符串数组而不使用引号和逗号。
#3楼
我认为%w()
是一个“字数组” - 元素由空格分隔,它返回一个字符串数组。
还有其他%文字:
-
%r()
是编写正则表达式的另一种方法。 -
%q()
是另一种编写单引号字符串的方法(可以是多行的,这很有用) -
%Q()
给出一个双引号字符串 -
%x()
是一个shell命令 -
%i()
给出一个符号数组(Ruby> = 2.0.0) -
%s()
将foo
变成符号(:foo
)
我不认识任何其他人,但可能有一些潜伏在那里......
#4楼
虽然这是一个老帖子,但问题仍然存在,而且答案对我来说并不总是很清楚,所以,这是我的想法:
%w
和%W
是与数组相关的常规分隔输入类型的示例。 还有其他类型包括%q
, %Q
, %r
, %x
和%i
。
大写和小写版本之间的区别在于它使我们能够访问单引号和双引号的功能。 使用单引号和(小写) %w
,我们没有代码插值( #{someCode}
)和有限范围的转义字符( \\\\
, \\n
)。 用双引号和(大写) %W
,我们有机会获得这些功能。
使用的分隔符可以是任何字符,而不仅仅是左括号。 播放上面的示例,看看它是否有效。
有关%w
和完整列表,转义字符和分隔符的示例的完整记录,请查看“ Ruby - %w vs%W - 揭示的秘密! ”
#5楼
摘自http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings上 Percent Strings的文档:
除了创建String的%(...)之外,%可以创建其他类型的对象。 与字符串一样,大写字母允许插值和转义字符,而小写字母禁用它们。
这些是ruby中字符串百分比的类型:
...
%w :字符串数组
#6楼
而不是%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]
更多信息,请点击此处
#7楼
我从一个用户全名的CSV电子表格中获得了一堆专栏,我需要保留格式,并留有空格。 我发现使用ruby时让他们进入的最简单方法是:
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
这突出显示%()
创建一个像"Porter Smith\\nJimmyJones\\nRonald Jackson"
的字符串,并获得你在"\\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
上split
字符串的数组。
所以为了回答OP的原始问题,他们可以编写%(cgi\\ spaeinfilename.rb;complex.rb;date.rb).split(';')
如果你想要space
存在的时候碰巧有space
最终的数组输出。
#8楼
还有%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...