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

Dan*_*nor 811 ruby arrays string notation

我正在查看FileUtils的文档.我对以下几行感到困惑:

FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Run Code Online (Sandbox Code Playgroud)

什么%w意思?你能指点我的文件吗?

sep*_*p2k 1205

%w(foo bar)是一个快捷方式["foo", "bar"].这意味着它是一种表示字符串数组的符号,这些字符串由空格而不是逗号分隔,并且没有引号.您可以在zenspider的quickref中找到编写文字的方法列表.

  • 此外,括号几乎可以是任何其他字符,例如方括号%w [...],花括号%w {...}甚至是感叹号%w!......!所有这些都具有相同的行为(返回一个数组). (195认同)
  • 记住这意味着什么的最简单方法是"空格(w)分离数组". (137认同)
  • 如果string有空格,只需用\来转义它们.例:`%w(ab\c def)#=> ["ab c","def"]` (120认同)
  • 请参阅http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html中的"一般分隔输入" (7认同)
  • 猜猜这个页面也解决了这个问题:http://www.ruby-doc.org/core-2.0/doc/syntax/literals_rdoc.html#label-Percent+Strings (6认同)
  • @Dmitriy,如果你想要使用`%w(..)`语法,如果你的字符串包含空格,你应该认真思考,转义它们会使你的代码更不易读.我建议在刻度线中使用常规的字符串数组(`['...','.. ..']`). (5认同)
  • 当正常语法工作正常时,为什么 Ruby 有这种编写字符串数组的替代方法?有谁知道设计思路是什么?在阅读其他人的代码时,这似乎是多余的,只是一个混淆的机会。 (4认同)
  • 有史以来最糟糕的 ruby​​ 语法,`%w(there_are less_than_you would_think)` 中有多少项?为了可写性而牺牲可读性是技术债务的本质。 (4认同)
  • 顺便说一句,因为ruby 2.0还有用于创建符号数组的`%i(...)`运算符:`%i(ab cd)#=> [:a,:b,:cd]` (3认同)
  • @levininja 因为 `%w(....)` 符号更容易输入。将 `x = ["the","quick", "brown", "fox"]` 与 `x = %w(the quick brown fox)` 进行比较,尤其是在剪切和粘贴时。 (2认同)

Mik*_*use 453

我认为它%w()是一个"单词数组" - 元素由空格分隔,它返回一个字符串数组.

还有其他%文字:

  • %r() 是编写正则表达式的另一种方法.
  • %q() 是另一种编写单引号字符串的方法(可以是多行的,这很有用)
  • %Q() 给出一个双引号字符串
  • %x() 是一个shell命令
  • %i() 给出一个符号数组(Ruby> = 2.0.0)
  • %s()变成foo一个符号(:foo)

我不认识任何人,但可能有一些潜伏在那里......

  • 从Ruby 2.0.0开始,您还可以使用`%i()`生成符号数组. (32认同)
  • 还有`%()`(或`%[]`或`%{}`),它给出双引号字符串并转义双引号,如`%Q()`.例如`%("发件人姓名"<sender@example.com>)#=>"\"发件人姓名\"<sender@example.com>" (10认同)
  • @ChristopherOezbek`%i[nterned]` 怎么样?由于符号是实习字符串。 (2认同)

Era*_*den 59

%s允许您创建任何符号,例如:

%s|some words|          #Same as :'some words'
%s[other words]         #Same as :'other words'
%s_last example_        #Same as :'last example'
Run Code Online (Sandbox Code Playgroud)

从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...
Run Code Online (Sandbox Code Playgroud)


Eva*_*her 32

%W%w允许您创建一个字符串数组,而不使用引号和逗号.

  • 有关%W和%w之间的差异,请参阅http://stackoverflow.com/questions/690794/ruby-arrays-w-vs-w (9认同)

小智 20

虽然这是一个老帖子,但问题仍然存在,而且答案对我来说并不总是很清楚,所以,这是我的想法:

%w并且%W是与数组相关的常规分隔输入类型的示例.还有其他类型,包括%q,%Q,%r,%x%i.

大写和小写版本之间的区别在于它使我们能够访问单引号和双引号的功能.使用单引号和(小写)%w,我们没有代码插值(#{someCode})和有限范围的工作(\\,\n)的转义字符.用双引号和(大写)%W,我们可以使用这些功能.

使用的分隔符可以是任何字符,而不仅仅是左括号.播放上面的示例,看看它是否有效.

有关%w完整列表和完整列表,转义字符和分隔符的完整记录,请查看" Ruby - %w vs%W - 揭示的秘密! "


Raj*_*hra 14

而不是%w()我们应该使用%w[]

根据Ruby风格指南:

当你需要一个单词数组(非空字符串,没有空格和特殊字符)时,首选%w到文字数组语法.仅将此规则应用于具有两个或更多元素的数组.

# bad
STATES = ['draft', 'open', 'closed']

# good
STATES = %w[draft open closed]
Run Code Online (Sandbox Code Playgroud)

使用最适合各种百分比文字的大括号.

[]对于数组文字(%w, %i, %W, %I),因为它与标准数组文字对齐.

# bad
%w(one two three)
%i(one two three)

# good
%w[one two three]
%i[one two three]
Run Code Online (Sandbox Code Playgroud)

更多阅读这里.

  • 如果您看到 Rubocop 出现错误,这就是它正在寻找的符号。 (2认同)

its*_*lay 11

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

除了创建String的%(...)之外,%可以创建其他类型的对象.与字符串一样,大写字母允许插值和转义字符,而小写字母禁用它们.

这些是ruby中字符串百分比的类型:
...
%w:字符串数组

  • 吉兹谢谢!我开始认为它不存在.其他人提供的rubydoc链接已被破坏. (2认同)