2013-01-11 1 views
1

simple queto_s et to_sym ne fonctionnent pas

c = :cat 
c.to_s 
puts c.class 

me donne Symbole et

c = "cat" 
c.to_sym 
puts c.class 

donne String. Ruby que j'utilise est 1.9.3 et la documentation dit que ceci devrait convertir le symbole en chaîne, et la chaîne en symbole. Qu'est-ce qui peut éventuellement être mauvais?

Répondre

4

to_s et to_sym ne pas muter la variable d'origine, mais plutôt de renvoyer une valeur. Vous devez appeler .class dans la chaîne avec .to_s.

c = :cat 
c.to_s.class 
# "String" 

c = "cat" 
c.to_sym.class 
# "Symbol" 

Si vous souhaitez convertir une nouvelle variable, vous devez l'affecter.

c = "cat" 
d = c.to_sym 
puts d.class 
# d is a symbol 
# "Symbol" 
+0

ok, cela fonctionne, mais cela signifie que c.to_s est en fait complètement inutile? – Leo

+0

@KubaPolaczek Non, cela signifie que vous l'appelez si nécessaire. C'est très utile et je l'utilise tout le temps. Si vous avez besoin d'une nouvelle variable, affectez la valeur. –

+0

l'a maintenant, merci – Leo

2

to_s et to_sym renvoient la nouvelle valeur, ils ne convertissent pas la variable.

1

essayer:

c = :cat 
c = c.to_s 
puts c.class # "String" 

c = "cat" 
c = c.to_sym 
puts c.class # "Symbol" 
Questions connexes