Les Conversions de Type Ruby: La “bonne” Façon?
Je suis en train de décider si une chaîne est un nombre en Ruby. C'est mon code
whatAmI = "32.3a22"
puts "This is always false " + String(whatAmI.is_a?(Fixnum));
isNum = false;
begin
Float(whatAmI)
isNum = true;
rescue Exception => e
puts "What does Ruby say? " + e
isNum = false;
end
puts isNum
Je me rends compte que je peux le faire avec une RegEx, mais est-il de toute façon standard de le faire que je suis absent? J'ai vu un can_convert? la méthode, mais je ne semble pas l'avoir.
Est-il un moyen d'ajouter un can_convert? méthode à toutes les Chaînes? Je comprends que c'est possible en Ruby. Je comprends aussi que cela peut être complètement inutiles...
Modifier La to_f méthodes ne fonctionnent pas, comme ils n'ont jamais lever une Exception, mais plutôt le juste retour 0 si elle ne fonctionne pas.
Vous devez vous connecter pour publier un commentaire.
Vous avez eu la bonne idée. Il peut être fait un peu plus compacte, mais:
Inline "sauvetage" est très amusant. Parenthesize la partie que vous souhaitez sauver si vous le mettez dans le milieu de plus de choses, comme:
Cela peut paraître trop critique, mais d'après votre description, vous êtes presque certainement de faire quelque chose de "mal"... Pourquoi auriez-vous besoin de vérifier si une Chaîne est une représentation valide de
Float
mais pas réellement de convertir la Chaîne de caractères?C'est juste une intuition, mais il peut être utile de décrire ce que vous essayez d'accomplir. Il y a probablement une "meilleure" façon.
Par exemple, vous pouvez insérer la Chaîne de caractères dans une base de données et mettre en place une instruction sql en utilisant la concaténation de chaîne. Il serait préférable de le convertir à un Flotteur et d'utiliser les requêtes préparées.
Si vous avez juste besoin d'inspecter la "forme" de la chaîne, il serait préférable d'utiliser une expression régulière, parce que, comme dylan l'a souligné, un Flotteur peut être représenté dans un certain nombre de moyens qui peuvent ou peuvent ne pas être appropriées.
Vous pouvez également avoir à traiter avec de l'aide internationale, en Europe, une virgule est utilisée au lieu d'un point comme séparateur décimal, mais Ruby Flotteurs ont à utiliser le (.).
Je ne sais pas à propos de la
can_convert
méthode, mais en général, une classe de définir des méthodes commeto_s
,to_i
,to_hash
et ainsi de suite. Ces méthodes retournent une représentation différente de l'objet, par exemple, unto_s
méthode renvoie une représentation sous forme de chaîne d'un objet.Comme pour la conversion, je suis sûr que quelqu'un d'autre peut répondre mieux que moi.
Sur une autre note, si vous vous demandez si vous pouvez ajouter une méthode à toutes les chaînes, vous pouvez. Il suffit d'ouvrir le
String
de la classe et de l'ajouter!Edit: Chaînes contenant la notation exponentielle sont pris en charge par
to_f
.