2011-03-14 15 views
22

En la publicación de Matt sobre drying up cucumber tests, Aslak suggests lo siguiente.¿Qué hace% {} en Ruby?

Cuando tengo un montón de cotizaciones, prefiero esto:

% Dada {entro “# {} User.first.username” en “nombre de usuario”}

Cuál es el %{CONTENT} construcción llamada? ¿Le importaría a alguien hacer referencia a él en alguna documentación? No estoy seguro de cómo buscarlo.

También están las cosas sobre %Q. ¿Eso es equivalente a solo %? ¿Qué hay de las llaves? ¿Puedes usar llaves cuadradas? Funcionan de manera diferente?

Finalmente, ¿cómo se llama la construcción #{<ruby stuff to be evaluated>}? ¿Hay alguna referencia a eso en la documentación en alguna parte también?

Respuesta

14
  1. "literales por ciento" suele ser una buena manera de google alguna información:

  2. #{} se llama "interpolación de cadenas".

+0

Si alguno de los que se explica con la '' {% en '% Dada {entro“# {} User.first.username”en“nombre de usuario”}' qué no pude lo encuentra ¿El '% {' es un error tipográfico o parte del Cucumber DSL? –

+2

Es equivalente a una cadena con las comillas dobles, con la excepción de que no tiene que escapar entre comillas dobles adentro (piense 'Dado' Ingresé \ "# {Usuario.first.nombreusuario} \" en \ "nombredeusuario \" "' –

+1

Es bueno saber sobre el porcentaje literal, el carácter de apertura y cierre puede ser casi cualquier cosa. Entonces '% {Some text}', '% [Some text]' pero también '% # Some text #' y '% 'Some text'' e incluso '%% Some text%' –

8

El #{1+1} se llama String Interpolation.

Yo, y Wikilibros, me refiero a las cosas % como solo "% notación". Reference here. La notación % toma cualquier delimitador, siempre que no sea alfanumérico. También puede tomar modificadores (algo así como cómo las expresiones regulares toman las opciones), uno de los cuales, curiosamente, es si permitirá la interpolación de cadena de estilo #{} (esto también está habilitado por defecto).

% y luego hace algunas cosas especiales, dando a esa notación algo distinto, aunque un poco críptico para los principiantes, la concisión. Por ejemplo, %w{hello world} devuelve una matriz ['hello','world']. %s{hello} devuelve un símbolo :hello.

5

Ninguna de las respuestas anteriores realmente responde la pregunta.

Esta es la notación de porcentaje. El signo de porcentaje indica que el siguiente carácter es un delimitador literal, y puede usar cualquier (no alfanumérico) que desee. Por ejemplo:

%{stuff} 
%[stuff] 
%?stuff? 

etc. Esto le permite poner comillas dobles, comillas simples, etc en la cadena sin escapar:

%{foo='bar with embedded "baz"'} 

devuelve la cadena literal: Barra de foo = 'con incrustado "baz "'

El signo de porcentaje puede ir seguido de un modificador de letra para determinar cómo se interpola la cadena.

detalles están aquí: Wikibooks