符号数组有文字表示法吗?


170

我喜欢这个字符串数组的文字表达:

%w( i can easily create arrays of words )

我想知道是否有文字来获取符号数组。我知道我能做

%w( it is less elegant to create arrays of symbols ).map( &:to_sym )

但是仅仅使用文字就太好了。


这种方法比仅创建符号数组更好?还是简单的方法?嗯
戴夫·牛顿2012年

在这种情况下,%w符号的意义何在?
m_x 2012年

IMO的符号数组已经比字符串数组的混乱程度小,并且通常不那么常见。YMMV。
戴夫牛顿

<troll>似乎自ruby 2以来,ruby团队同意了我... </ troll>
m_x 2013年

Answers:


277

是! 现在可以在Ruby 2.0.0中实现。一种写法是:

%i{foo bar}  # => [:foo, :bar]

您还可以使用其他定界符,因此也可以编写%i(foo bar)%i!foo bar!例如。

此功能最初在此处宣布:

http://www.ruby-lang.org/zh_TW/news/2012/11/02/ruby-2-0-0-preview1-released/

Ruby的官方文档在这里提到了它:

http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings


3
谢谢,@ MarcelJackwerth已经在对先前接受的答案的评论中指出了这一点,但是我会接受你的后代。
m_x

3
注意,与其他修饰符一样,可以使用一系列其他定界符。例如%i[foo bar]%i{foo bar}%i!foo bar!%i%foo bar%
user664833 2014年

1
如果您想在TextMate或Sublime Text中突出显示对此的支持,请在this gist中签出我修改过的.tmLanguage文件
Ben Kreeger 2014年

1
根据rubocop,建议使用%i[foo bar]
Mapad

26

不幸的是,在Ruby 1.x中,可用%分隔符的列表是有限的

Modifier    Meaning
%q[ ]       Non-interpolated String (except for \\ \[ and \])
%Q[ ]       Interpolated String (default)
%r[ ]       Interpolated Regexp (flags can appear after the closing delimiter)
%s[ ]       Non-interpolated Symbol
%w[ ]       Non-interpolated Array of words, separated by whitespace
%W[ ]       Interpolated Array of words, separated by whitespace
%x[ ]       Interpolated shell command

太糟糕了。不过,感谢您提供的链接和列表。不知道%x,似乎比我使用的反引号更可读
m_x 2012年

3
好吧,对于那些几乎无法将现有的保留在脑子里的人(那就是我),并不是那么不幸。
tokland 2012年

26
在Ruby 2.0,我们会得到%I的符号阵列,请参见:ruby-lang.org/zh_TW/news/2012/11/02/...
马塞尔Jackwerth
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.