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