44 votes

Pourquoi deux chaînes séparées par un espace concaténent-elles en Ruby?

Pourquoi ça marche en Ruby:

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

Je ne suis pas sûr de savoir pourquoi les chaînes ont été concaténées au lieu d'une erreur de syntaxe.

Je suis curieux de savoir s'il s'agit ou non du comportement attendu et si l'analyseur est responsable de la querelle (deux chaînes sans opérateurs est considérée comme une chaîne unique) ou si la définition du langage lui-même spécifie ce comportement (concat implicite).

50voto

JKillian Points 2243

En C et C++, les littéraux de chaîne uns à côté des autres sont concaténées. Comme ces langues influencé Ruby, je suppose qu'il hérite de là.

Et il est documenté dans Ruby maintenant: voir cette réponse et cette page en Ruby le repo qui stipule:

Adjacent littéraux de chaîne sont automatiquement concaténées par l'interprète:

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

Toute combinaison de côté d'apostrophes, guillemets, pour cent chaînes peuvent être concaténées en tant que pourcentage de la chaîne n'est pas la dernière.

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

34voto

Ahmad Sherif Points 3121

La mise en œuvre de détails peuvent être trouvés en parse.y le fichier en Ruby code source. Plus précisément, ici.

Un Rubis string soit une tCHAR (par exemple, ?q), un string1 (par exemple, "q", "q", ou %q{q}), ou une définition récursive de la concaténation de string1 et string lui-même, quels résultats dans la chaîne des expressions comme "foo" "bar", 'foo' "bar" ou ?f "oo" 'bar' être concaténées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X