¿Existe una notación literal para una serie de símbolos?

170

Me gusta esta expresión literal para una serie de cadenas:

%w( i can easily create arrays of words )

Me pregunto si hay un literal para obtener una serie de símbolos. Se que puedo hacer

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

pero sería maravilloso usar un literal.

m_x
fuente
¿Este enfoque sería mejor que simplemente crear una serie de símbolos? ¿O un método simple? Meh
Dave Newton
en este caso, ¿cuál es el punto de la %wnotación?
m_x
En mi opinión, una matriz de símbolos ya está menos abarrotada que una matriz de cadenas y, en general, es menos común. YMMV.
Dave Newton el
<troll> parece que el equipo de ruby ​​estuvo de acuerdo conmigo desde ruby ​​2 ... </troll>
m_x
3
Posible duplicado de Crear conjunto de símbolos
sjakobi

Respuestas:

277

¡Si! Esto es posible ahora en Ruby 2.0.0. Una forma de escribirlo es:

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

También puede usar otros delimitadores, por lo que también podría escribir %i(foo bar)o, %i!foo bar!por ejemplo.

Esta característica se anunció originalmente aquí:

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

Se menciona en la documentación oficial de Ruby aquí:

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

David Grayson
fuente
3
gracias, @ MarcelJackwerth ya lo declaró en un comentario sobre la respuesta aceptada anterior, pero aceptaré la suya para la posteridad.
m_x
3
Tenga en cuenta que, al igual que con otros modificadores, es posible utilizar un rango de otros delimitadores. por ejemplo %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833
1
Si desea resaltar el soporte para esto en TextMate o Sublime Text, consulte mi archivo .tmLanguage modificado en esta esencia .
Ben Kreeger
1
de acuerdo con rubocop , se recomienda usar%i[foo bar]
Mapad
26

En Ruby 1.x, desafortunadamente la lista de % -delimitadores disponibles es 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
fuente
lástima ... gracias por el enlace y la lista, sin embargo. No sabía%x , parece más legible que la notación de
backticks que
3
bueno, no es tan desafortunado para aquellos que apenas pueden mantener los existentes en sus cabezas (ese sería yo).
tokland
26
En Ruby 2.0 obtendremos% i para matrices de símbolos, ver: ruby-lang.org/zh_TW/news/2012/11/02/…
Marcel Jackwerth