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


¿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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.