La concaténation de chaîne dans Rails 3
Je me demande pourquoi il en est ainsi: Ruby concatène deux chaînes si il y a un espace entre le signe et la chaîne suivante. Mais si il n'y a pas d'espace, il ne s'applique certains opérateur unaire?
params['controller'].to_s + '/'
# => "posts/"
params['controller'].to_s +'/'
# => NoMethodError: undefined method `+@' for "/":String
double possible de la Concaténation de Chaîne d'Erreur
OriginalL'auteur valk | 2013-04-07
Vous devez vous connecter pour publier un commentaire.
L'analyseur est l'interprétation
+'/'
comme premier paramètre de lato_s
appel de méthode. Il est le traitement de ces deux états comme équivalent:Si vous d'inclure explicitement la parenthèse à la fin de la
to_s
appel de la méthode le problème disparaît:OriginalL'auteur Matt Glover
Si vous voulez concaténer une chaîne de caractères, le moyen le plus sûr est d'écrire
"#{params[:controller].to_s} /"
ruby échappement de la chaîne est plus sécuritaire et meilleur, dans de nombreux cas,safer
est la bosse!OriginalL'auteur OneChillDude
Regardez de plus près le message d'erreur:
C'est parce que
unary operator
+
,-
etc est définie uniquementNumeric
les objets de la classe. Il sera évident si vous regardez le code ci-dessous:Maintenant l'erreur ci-dessus est exactement ce
to_s
. Commeto_s
ne prend aucun argument lorsqu'il est appelé.Version correcte est:
OriginalL'auteur Arup Rakshit