2011-06-18 15 views
9

Ruby newbie. ¿Qué pasa con este código?Ruby Float to String error

city_details['longitude'] + "," + city_details['latitude'] 

me sale este error:

./player_location.rb:6:in `+': String can't be coerced into Float (TypeError) 

Respuesta

12

Parece que city_details['longitude']city_details['latitude'] y son Float valores.

No se puede agregar Float a un String en Ruby como este. Puede convertir todo a String, y luego +, o usar la interpolación de cadenas.

city_details['longitude'].to_s + "," + city_details['latitude'].to_s 

"#{city_details['longitude']},#{city_details['latitude']}" 

La mayoría de los Ruby tienden a utilizar la interpolación de cadenas.

+2

la interpolación es más rápida porque ruby ​​crea un objeto String único, mientras que el uso de '+' crea una cadena para cada operando. es por eso que la mayoría de los rubistas usan interpolación. –

6

Se queja de que el hecho de que usted está tratando de concatenar una float con un string.

La mejor manera de hacer esto es mediante el que hace la cadena de interpolación:

"#{city_details['longitude']}, #{city_details['latitude']}" 

Otras soluciones posibles:

  • podría convertir cada flotador de cuerda, llamando al método to_s como esto:

    city_details['longitude'].to_s + "," + city_details['latitude'].to_s

  • o puede utilizar el método de join:

    [city_details['longitude'], city_details['latitude']].join(",")

+0

el primer enfoque es 2 veces más lento que la interpolación, el segundo tal vez el peor. –

+0

Sí, es correcto. Edité mi respuesta para señalar el mejor enfoque. Sin embargo, es bueno conocer todas las formas posibles de hacerlo, porque podrían ser útiles en otros casos. –