ruby %w(数组)是什么意思?

4dc9hkyq  于 2023-01-25  发布在  Ruby
关注(0)|答案(8)|浏览(332)

我在看FileUtils的文档。
我被下面这句话搞糊涂了:

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

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

2sbarzqh

2sbarzqh1#

%w(foo bar)["foo", "bar"]的一个快捷方式,意思是它是一种表示法,用来写一个用空格而不是逗号分隔的字符串数组,并且不带引号,你可以在zenspider的quickref中找到一个写常量的方法列表。

wbgh16ku

wbgh16ku2#

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

  • %w()字符串数组
  • %r()正则表达式。
  • %q()字符串
  • %x() shell命令(返回输出字符串)
  • %i()符号数组(Ruby〉= 2.0.0)
  • %s()符号
  • %()(不带字母)%Q()的快捷方式

分隔符()可以替换为许多变体,如[]|!等。
当使用大写字母%W()时,可以使用字符串插值#{variable},类似于"'字符串分隔符。

abc = 'a b c'
%w[1 2#{abc} d] #=> ["1", "2\#{abc}", "d"]
%W[1 2#{abc} d] #=> ["1", "2a b c", "d"]
2mbi3lxu

2mbi3lxu3#

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

v6ylcynt4#

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

v9tzhpje

v9tzhpje5#

虽然这是一个老职位,问题不断出现,答案似乎并不总是对我来说清楚,所以,这里是我的想法:
%w%W是与数组相关的常规分隔输入 * 类型 * 的示例。还有其他类型,包括%q%Q%r%x%i
大写和小写版本的不同之处在于它让我们可以使用单引号和双引号的功能。(小写)%w,我们没有代码插值(#{someCode})和有限范围的转义字符(\\\n)。使用双引号和(大写)%W,我们 * 可以 * 访问这些功能。
使用的分隔符可以是任何字符,而不仅仅是左圆括号。播放上面的例子,看看效果如何。
有关%w示例和完整列表、转义符和分隔符的完整说明,请查看“Ruby - %w vs %W – secrets revealed!

hrirmatl

hrirmatl6#

我们应该使用%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]

更多信息请点击此处。

5uzkadbs

5uzkadbs7#

摘自www.example.com上的百分比字符串文档http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings:
除了创建字符串的%(...)之外,%还可以创建其他类型的对象。与字符串一样,大写字母允许插入和转义字符,而小写字母则禁用它们。
以下是Ruby中百分比字符串的类型:
...

%w:字符串数组

drkbr07n

drkbr07n8#

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

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

这突出显示了%()创建了一个类似"Porter Smith\nJimmyJones\nRonald Jackson"的字符串,要获得数组,您可以split"\n"["Porter Smith", "Jimmy Jones", "Ronald Jackson"]上的字符串
因此,为了回答OP最初的问题,如果您希望space存在于最终数组输出中,而恰好存在space,则他们可以写入%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')

相关问题