2008-11-19 6 views
7

Dans Ruby nous avons la méthode 'bang' capitalize! qui a le comportement étrange de retourner un nil si aucune modification à la chaîne n'a été faite.Ruby 'Capitaliser!' paradox

Cela signifie que je ne peux pas enchaîner ces commandes avec d'autres car cela détruit effectivement la chaîne si elle renvoie nil.

Que Im essayant de faire est quelque chose comme ceci:

fname = fullname[0...fullname.index(' ')].capitalize! 

qui extrait le premier nom d'une chaîne et devrait tirer parti aussi. Mais si elle est déjà en majuscule, la chaîne stockée en fname est nil. Bien sûr, je peux ajouter une autre affirmation mais je me demandais s'il y avait un moyen de le faire "sans casser la chaîne".

Répondre

17

Utilisez .capitalize (sans le bang) - sauf si vous en avez vraiment besoin pour changer la source.

+0

omg ... je ne peux pas croire que je n'ai pas réalisé moi-même :(tnx mec –

+0

Très heureux d'entendre cela aidé. :) – HanClinto

+0

@HanClinto Que faire si vous avez besoin de la variable pour capitaliser et enregistrer (via!) Mais peut pas garantir que l'utilisateur entrera en minuscules? Existe-t-il un moyen de le faire sans enchaîner une autre méthode? – FluxEngine

7

Étant donné que votre déclaration ne change pas la valeur de fullname, il suffit de faire:

fname = fullname[0...fullname.index(' ')].capitalize 

Ce qui ne revient pas nul si aucune modification.

Questions connexes