Ruby newbie. Quel est le problème avec ce code?Ruby Float to String erreur
city_details['longitude'] + "," + city_details['latitude']
Je reçois cette erreur:
./player_location.rb:6:in `+': String can't be coerced into Float (TypeError)
Ruby newbie. Quel est le problème avec ce code?Ruby Float to String erreur
city_details['longitude'] + "," + city_details['latitude']
Je reçois cette erreur:
./player_location.rb:6:in `+': String can't be coerced into Float (TypeError)
Il ressemble à city_details['longitude']
et city_details['latitude']
sont Float
valeurs.
Vous ne pouvez pas ajouter Float
à un String
dans Ruby comme ceci. Vous pouvez soit tout convertir en String
, puis +
entre eux, ou utiliser l'interpolation de chaîne.
city_details['longitude'].to_s + "," + city_details['latitude'].to_s
"#{city_details['longitude']},#{city_details['latitude']}"
La plupart des rubisistes ont tendance à utiliser l'interpolation de chaîne.
Il se plaint du fait que vous essayez de concaténer une float
avec un string
.
La meilleure façon de le faire est en faisant une interpolation chaîne:
"#{city_details['longitude']}, #{city_details['latitude']}"
Autres solutions possibles:
Vous pouvez convertir chaque flotteur en chaîne, en appelant la méthode to_s
comme ceci:
city_details['longitude'].to_s + "," + city_details['latitude'].to_s
Ou vous pouvez utiliser la méthode join
:
[city_details['longitude'], city_details['latitude']].join(",")
la première approche est 2x plus lente que l'interpolation, la seconde peut-être pire. –
Oui, c'est correct. J'ai édité ma réponse pour pointer la meilleure approche. Cependant, il est bon de connaître tous les moyens possibles pour le faire, car ils pourraient être utiles dans d'autres cas. –
L'interpolation est plus rapide car ruby crée un objet String unique, tandis que l'utilisation de '+' crée une chaîne pour chaque opérande. c'est pourquoi la plupart des rubystes utilisent l'interpolation. –