Есть ли буквальное обозначение для массива символов?

Мне нравится это литеральное выражение для массива строк:

%w( i can easily create arrays of words )

Мне интересно, есть ли литерал, чтобы получить массив символов. Я знаю, что могу сделать

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

но было бы замечательно просто использовать литерал.

Ответ 1

Да! Это возможно сейчас в 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

Ответ 2

В 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