Ruby%w(...)vs%w [...]

时间:2013-11-03 22:33:46

标签: ruby

Ruby中的%w(don matt james)%w[don matt james]之间是否存在差异?

使用Ruby控制台,它们都输出一个数组,每个单词作为一个元素。我很好奇为什么有多种方法可以做到这一点 - 以及应该如何使用每种方式。

3 个答案:

答案 0 :(得分:10)

没有区别。任何单个非字母数字字符或任何“配对”字符集都可用作分隔符,如http://en.wikibooks.org/w/index.php?title=Ruby_Programming/Syntax/Literals所述(请参阅“%符号”)和http://www.ruby-doc.org/core-2.0.0/doc/syntax/literals_rdoc.html#label-Percent+Strings

答案 1 :(得分:3)

任一选项都可以,并产生相同的结果。语法甚至还有一些其他变体:

%w'don matt james'
%w{don matt james}

答案 2 :(得分:3)

根据您的特定示例,输出相同,但存在差异。分隔符自由的目的是允许文字内的不同字符而不逃避。如果您使用某些字符作为分隔符,则不能在没有转义的情况下在符号中使用它们。根据您的具体情况,您应该使用不同的分隔符。

["foo()", "bar()"]
%w(foo() bar()) # => error
%w[foo() bar()]

["foo[1]", "bar[5]"]
%w(foo[1] bar[5])
%w[foo[1] bar[5]] # => error