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.