Existe uma notação literal para uma matriz de símbolos?

170

Eu gosto dessa expressão literal para uma matriz de strings:

%w( i can easily create arrays of words )

Gostaria de saber se existe um literal para obter uma matriz de símbolos. Eu sei que posso fazer

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

mas seria tão maravilhoso apenas usar um literal.

m_x
fonte
Essa abordagem seria melhor do que apenas criar uma matriz de símbolos? Ou um método simples? Meh.
Dave Newton
Nesse caso, qual é o objetivo da %wnotação?
m_x
Na IMO, uma matriz de símbolos é menos confusa do que uma matriz de cadeias de caracteres, e geralmente menos comum. YMMV.
Dave Newton
<trolls> parece que a equipe rubi concordou comigo desde ruby 2 ... </ trolls>
m_x
3
Possível duplicado de Criar conjunto de símbolos
sjakobi

Respostas:

277

Sim! Isso é possível agora no Ruby 2.0.0. Uma maneira de escrever é:

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

Você também pode usar outros delimitadores, para escrever %i(foo bar)ou %i!foo bar!por exemplo.

Esse recurso foi anunciado originalmente aqui:

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

É mencionado na documentação oficial do Ruby aqui:

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

David Grayson
fonte
3
obrigado, @ MarcelJackwerth já afirmou isso em um comentário sobre a resposta anterior aceita, mas eu aceito a sua para a posteridade.
m_x
3
Observe que, como em outros modificadores, é possível usar vários outros delimitadores. por exemplo %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833
1
Se você deseja destacar o suporte para isso no TextMate ou Sublime Text, confira meu arquivo .tmLanguage modificado nesta lista .
Ben Kreeger
1
de acordo com rubocop , é aconselhável usar%i[foo bar]
Mapad
26

Infelizmente, no Ruby 1.x, a lista de % -delimitadores disponíveis é limitada

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
Gareth
fonte
muito ruim ... obrigado pelo link e lista, no entanto. não sabia %x, parece mais legível do que os acentos graves notação eu uso
m_x
3
bem, não é tão infeliz para aqueles que mal conseguem manter os existentes em suas cabeças (isso seria eu).
precisa saber é o seguinte
26
No Ruby 2.0, obteremos% i para matrizes de símbolos, consulte: ruby-lang.org/zh_TW/news/2012/11/02/…
Marcel Jackwerth