Есть ли буквальное обозначение для массива символов?
Мне нравится это литеральное выражение для массива строк:
%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