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


170

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

%w( i can easily create arrays of words )

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

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

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


Этот подход будет лучше, чем просто создать массив символов? Или простой метод? Мех.
Дэйв Ньютон,

в этом случае, какой смысл в %wобозначениях?
m_x

IMO массив символов уже менее загроможден, чем массив строк, и, как правило, менее распространен. YMMV.
Дэйв Ньютон

<troll> кажется, что команда ruby ​​согласилась со мной начиная с ruby ​​2 ... </ troll>
m_x

3
Возможный дубликат массива Create
sjakobi

Ответы:


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

1
Если вы хотите выделить поддержку для этого в TextMate или Sublime Text, посмотрите мой измененный файл .tmLanguage в этой сущности .
Бен Крегер,

1
по словам Рубокопа , его рекомендуется использовать%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

3
что ж, не так уж и плохо для тех, кто едва может держать в голове существующих (это был бы я).
Tokland

26
В Ruby 2.0 мы получим% i для символьных массивов, см .: ruby-lang.org/zh_TW/news/2012/11/02/…
Марсель Джекверт,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.