una strings str recorrer que example concatenate cadena ruby string concatenation behavior

strings - ¿Por qué dos cadenas separadas por el espacio se concatenan en Ruby?



recorrer un string en ruby (2)

¿Por qué funciona esto en Ruby?

"foo" "bar" # => "foobar"

No estoy seguro de por qué las cadenas se concatenaron en lugar de un error de sintaxis.

Tengo curiosidad sobre si este es el comportamiento esperado y si es algo que el analizador es responsable de disputar (dos cadenas sin operadores se considera una sola cadena) o la definición del lenguaje en sí misma está especificando este comportamiento (concat implícito).


En C y C ++, los literales de cadena uno al lado del otro están concatenados . Como estos idiomas influenciaron a Ruby, supongo que hereda de allí.

Y está documentado en Ruby ahora: vea esta respuesta y esta página en el repositorio de Ruby que dice:

Los intérpretes concatenan literalmente los literales de cadena adyacentes:

"con" "cat" "en" "at" "ion" #=> "concatenation" "This string contains "/ "no newlines." #=> "This string contains no newlines."

Cualquier combinación de cadenas de porcentajes de comillas simples, comillas dobles, se concatenará siempre que una cadena de porcentajes no sea la última.

%q{a} ''b'' "c" #=> "abc" "a" ''b'' %q{c} #=> NameError: uninitialized constant q


Los detalles de implementación se pueden encontrar en el archivo parse.y en el código fuente de Ruby. Específicamente, here .

Una string Ruby es una tCHAR (por ejemplo tCHAR ?q ), una string1 (por ejemplo, "q", "q" o% q {q}), o una definición recursiva de la concatenación de la string1 y la string misma, lo que da como resultado una cadena expresiones como "foo" "bar" , ''foo'' "bar" o ?f "oo" ''bar'' se concatenan.