2008-11-19 15 views
7

En Ruby tenemos el método 'bang' capitalize! que tiene el extraño comportamiento de devolver nil si no se hicieron cambios en la cadena.Ruby 'Capitalize!' paradoja

Eso significa que no puedo encadenar estos comandos con otros ya que efectivamente destruye la cadena si devuelve nil.

Lo que estoy tratando de hacer es algo como esto:

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

que extrae el nombre de una cadena y debe sacar provecho también. Pero si ya está en mayúscula, la cadena almacenada en fname es nil.

De los cursos, puedo agregar otra declaración pero me preguntaba si hay una manera de hacerlo "sin romper la cadena".

Respuesta

17

Use .capitalize (sin la explosión) - a menos que realmente lo necesite para cambiar la fuente.

+0

omg ... no puedo creer que no me haya dado cuenta de esto :(tnx dude –

+0

Me alegro de haberlo ayudado. :) – HanClinto

+0

@HanClinto ¿Qué pasa si necesita la variable para capitalizar y guardar (a través de!) Pero puede ¿no se garantiza que el usuario ingresará en minúsculas? ¿Hay alguna manera de hacerlo sin tener que encadenar otro método? – FluxEngine

7

Debido a que su declaración no cambia el valor de nombre completo, simplemente:

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

que no devuelve nil si no se realiza ningún cambio.