2010-02-14 22 views
9

No entiendo por qué algunas personas usan mucho la sintaxis de porcentajes en ruby.¿Cuáles son los pros y los contras de la entrada delimitada general de Ruby? (sintaxis porcentual)

Por ejemplo, yo estoy leyendo a través de la ruby plugin guide y utiliza un código como:

%w{ models controllers }.each do |dir| 
    path = File.join(File.dirname(__FILE__), 'app', dir) 
    $LOAD_PATH << path 
    ActiveSupport::Dependencies.load_paths << path 
    ActiveSupport::Dependencies.load_once_paths.delete(path) 
end 

Cada vez que veo algo como esto, tengo que ir a buscar la referencia de sintaxis porcentaje porque Don No recuerdo lo que% w significa.

¿Es esa sintaxis realmente preferible a ["models", "controllers"].each ...?

Creo que en este último caso es más claro que he definido una serie de cadenas, pero en el primero, especialmente para alguien que está aprendiendo ruby, no parece tan claro, al menos para mí.

Si alguien puede decirme que me falta un punto clave aquí, por favor, porque me cuesta entender por qué la mayoría de los programadores de rubí prefieren la sintaxis porcentual.

+3

¿Porque los creadores de Ruby prefieren tener más de una forma de hacerlo? – Earlz

+0

Honestamente, parece ser el caso con mucha sintaxis de ruby ​​ – brad

+0

Las ediciones son una mejora, pero algunas personas siguen viendo esta pregunta como un poco argumentativa o subjetiva. Es posible que un título cambie a, p., "¿Cuáles son los pros y los contras de la información delimitada general de Ruby?", Y cambios similares en el texto, ayudarían a mantener la pregunta abierta. –

Respuesta

15

Una buena utilización para la entrada delimitado general (como% w,% R, etc., están llama) para evitar tener que escapar delimitadores. Esto lo hace especialmente bueno para literales con delimitadores incrustados. Contrasta con la expresión regular

/^\/home\/[^\/]+\/.myprogram\/config$/ 

con

%r|^/home/[^/]+/.myprogram/config$| 

o la cadena

"I thought John's dog was called \"Spot,\" not \"Fido.\"" 

con

%Q{I thought John's dog was called "Spot," not "Fido."} 

Al leer más Ruby, el significado de la entrada delimitada general (% w,% r, & c.), Así como otras peculiaridades y expresiones idiomáticas de Ruby, se harán evidentes.


Creo que no es un accidente que Ruby a menudo tenga varias formas de hacer lo mismo. Ruby, como Perl, parece ser un postmodern language: el minimalismo no es un valor central, sino simplemente una de las muchas fuerzas de diseño que compiten entre sí.

+1

Supongo que el último debe ser% Q {...} de lo contrario es una expresión regular. La diferencia entre mayúsculas y minúsculas (% R frente a% r) es solo si se resuelven las interpolaciones. – hurikhan77

+0

@ hurikhan77, sí, eso es lo que quise decir. El cerebro de lagartija, la criatura de la costumbre que es, mecanografió% R cuando no estaba mirando. Gracias por atrapar eso. –

2

A medida que crece el tamaño de la matriz, la sintaxis %w ahorra más y más pulsaciones de teclas al no hacer que escriba todas las comillas y comas. Al menos esa es la razón dada en Learning Ruby.

+2

También es útil para evitar escaparse '" 'en cadenas – kejadlen

+4

Guardar las teclas es irrelevante. Sin embargo, el código solo se escribe una vez. Sin embargo, se lee * muchas * veces y ahí es donde se reduce el desorden visual * realmente * brilla. –

+1

@Jorg: una de las prioridades de Ruby es la felicidad/productividad del desarrollador. Guardar las teclas innecesarias está definitivamente en la lista. – rfunduk

2

La sintaxis %w reduce 3 caracteres de cada elemento de la lista ... ¡no puede superar eso!

alt text

3

Es fácil de recordar: %w{} es de "palabras", %r{} de las expresiones regulares, %q{} para "comillas", y así sucesivamente ... Es bastante fácil una vez que construir este tipo de ayudas para la memoria.

Cuestiones relacionadas