2010-12-15 15 views
32

tengo los siguientes, que funciona bien:Rieles - Uso% W

def steps 
    %w[hello billing confirmation] 
end 

steps.first 

Pero yo quiero hacer esto:

def step_title 
    %w['Upload a photo' 'Billing Info' 'Confirmation Screen'] 
    end 

steps.first 

¿Cómo% w permiten que? Probé una búsqueda en google, pero google es débil con este tipo de caracteres.

Gracias

Respuesta

39

%w crea una "matriz de palabras" y usa espacios en blanco para separar cada valor. Puesto que desea separar en otro valor (en este caso, los conjuntos de fuera de espacio en blanco de las comillas), sólo tiene que utilizar una matriz estándar:

['Upload a photo', 'Billing Info', 'Confirmation Screen'] 
+0

¿Cómo se puede saber esto? Siempre es bueno apuntar a una fuente como la documentación oficial de Ruby: http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings – maikel

2

%w[hello billing confirmation] es el azúcar sintaxis para ["hello", "billing", "confirmation"]. Le dice a Ruby que divida la cadena de entrada en palabras, en función del espacio en blanco, y que devuelva una matriz de palabras.

Si su caso de uso específico significa que los valores en la matriz tienen espacio, no puede usar %w.

En su caso, ['Upload a photo', 'Billing Info', 'Confirmation Screen'] basta.

+0

Sin comas que separen cada valor, las cadenas se concatenarán y la matriz resultante contendrá una sola cadena. –

+0

¿Cómo no capto eso ... – yfeldblum

9

También puede utilizar la barra invertida para escapar de los espacios:

%[email protected]\ bar [email protected] 

es lo mismo que:

[ 'foo bar', 'bang' ] 

En su ejemplo yo no usaría la notación %w, debido a que no es tan clara.

PS. Me gusta la mezcla de los caracteres delimitadores, simplemente para molestar a los miembros del equipo :) De esta manera:

%w?foo bar? 
%w|foo bar| 
%w\foo bar\ 
%w{foo bar} 
+2

Molestar a los miembros de mi equipo es muy gratificante. – Ringo

26

%w() es una "matriz palabra" - los elementos están delimitados por espacios.

hay otras cosas:%

%r() es otra manera de escribir una expresión regular.

%q() es otra manera de escribir una cadena entre comillas simples (y puede ser de varias líneas, que es útil)

%Q() da una cadena entre comillas dobles

%x() es un comando shell.

1

Una razón por la que desearía usar% w (xxx) sobre ["xxx", "xx1"] es que con% w puede formatear los contenidos para su legibilidad.Por ejemplo, si tiene muchos valores estáticos que están codificados duro en una matriz, que son mucho más fáciles de leer cuando se apilan de esta manera:

  assets.precompile += %w( 
           bootstrap-datepicker.js 
           datepicker.css 
           flower_chart.js 
           jquery.flower-sort.js 
           bootstrap-timepicker.js 
           bootstrap-timepicker.css 
           admin.css 
           admin.js 
           flower_feature.js 
           jquery.flower.tooltip.min.js 
           jquery.infinite-flowers.js 
           data-flowers.bootstrap.min.js 
           jquery.monkey-flowers.min.js) 

de aplanado y rodeado por comillas y comas como esto

["bootstrap-datepicker.js", "datepicker.css", "flower_chart.js", "jquery.flower-sort.js", "bootstrap-timepicker.js", "bootstrap-timepicker.css", "admin.css", "flower_feature.js", "jquery.flower.tooltip.min.js", "jquery.infinite-flowers.js", "data-flowers.bootstrap.min.js", "jquery.monkey-flowers.min.js"] 

, ambos dan como resultado la misma matriz.

Cuestiones relacionadas