Есть ли буквальная запись для массива символов? - PullRequest
163 голосов
/ 11 января 2012

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

%w( i can easily create arrays of words )

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

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

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

Ответы [ 2 ]

267 голосов
/ 26 января 2013

Да! Это возможно сейчас в Ruby 2.0.0. Один из способов написать это:

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

Вы также можете использовать другие разделители, например, вы можете написать %i(foo bar) или %i!foo bar!.

Эта функция была первоначально анонсирована здесь:

http://www.ruby -lang.org / zh_TW / Новости / 2012/11/02 / рубин-2-0-0-preview1 выпущен /

Упоминается в официальной документации Ruby здесь:

http://ruby -doc.org / ядро ​​/ документ / синтаксис / literals_rdoc.html # пометка Percent + Струна

25 голосов
/ 11 января 2012

В 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
...