2011-06-18 5 views
9

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) 

Répondre

12

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.

+2

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. –

6

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(",")

+0

la première approche est 2x plus lente que l'interpolation, la seconde peut-être pire. –

+0

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. –