2011-06-14 14 views
7
long_string = <<EOS 
It was the best of times, 
It was the worst of times. 
EOS 

que devuelve 53. ¿Por qué? El espacio en blanco cuenta? Aún así. ¿cómo obtenemos 53?No entiendo por qué string.size devuelve lo que hace

¿Qué tal esto?

 def test_flexible_quotes_can_handle_multiple_lines 
    long_string = %{ 
It was the best of times, 
It was the worst of times. 
} 
    assert_equal 54, long_string.size 
    end 

    def test_here_documents_can_also_handle_multiple_lines 
    long_string = <<EOS 
It was the best of times, 
It was the worst of times. 
EOS 
    assert_equal 53, long_string.size 
    end 

es éste el caso porque el% {case cuenta cada /n como un personaje y theres considerados como uno antes de la primera línea, uno al final, y luego, al final de la segunda línea, mientras que en el caso EOS solo hay uno antes de la 1ra linea y uno despues de la 1ra linea? En otras palabras, ¿por qué los primeros 54 y los últimos 53?

+0

Oh, por favor, no cita a Charles Dickens ... – alternative

Respuesta

14

Por:

long_string = <<EOS 
It was the best of times, 
It was the worst of times. 
EOS 

String is: 
"It was the best of times,\nIt was the worst of times.\n" 

It was the best of times, => 25 
<newline> => 1 
It was the worst of times. => 26 
<newline> => 1 
Total = 25 + 1 + 26 + 1 = 53 

Y

long_string = %{ 
It was the best of times, 
It was the worst of times. 
} 

String is: 
"\nIt was the best of times,\nIt was the worst of times.\n" 
#Note leading "\n" 

Cómo funciona:

En el caso de <<EOS, las líneas que le siguen son parte de la cadena. Todo el texto después de << en la misma línea que << y hasta el final de la línea sería parte del "marcador" que determina cuándo termina la cadena (en este caso, un EOS en una línea coincide con el <<EOS).

En el caso de %{...}, es simplemente un delimitador diferente utilizado en lugar de "...". Entonces, cuando la cadena comienza en una nueva línea después de %{, esa nueva línea es parte de la cadena.

probar este ejemplo y verá cómo %{...} está trabajando mismo que "...":

a = " 
It was the best of times, 
It was the worst of times. 
" 
a.length # => 54 

b = "It was the best of times, 
It was the worst of times. 
" 
b.length # => 53 
+0

Eso es lo que contaba también. – kinakuta

Cuestiones relacionadas