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