2010-03-20 12 views

Respuesta

11

yo no quiero ser demasiado quisquillosa, pero si quieres ser más como Python' s enfoque, en lugar de hacer "StackOverflow"[0..-2] puede hacer "StackOverflow"[0...-1] para obtener el mismo resultado.

En Ruby, un rango con 3 puntos excluye el argumento correcto, donde un rango con dos puntos lo incluye. Entonces, en el caso del corte de cadena, los tres puntos están un poco más cerca de la sintaxis de Python.

+0

Ahora, eso me hizo leer los documentos de Range nuevamente y aprender sobre los puntos triples por primera vez. ¡Bonito! – hermannloose

+0

Mi queja con dos puntos contra tres puntos es que es fácil confundir o contar un número incorrecto de puntos, aumentando la posibilidad de un error o haciendo que el mantenimiento sea un poco más difícil. En mi opinión, usar tres es más una curiosidad ya que realmente no me ayuda a escribir un código más claro. –

+0

@ Z.E.D .: Uno de los casos de uso para rangos de 3 puntos está ejecutando una declaración de caso sobre flotantes. Consulte la página 97 del libro de Pico para Ruby 1.9, si lo tiene. –

2

"stackoverflow"[0..-2] volverá "stackoverflo"

4

Su actual Rubí no hace lo que usted describe: se corta el último carácter, pero también invierte la cadena.

El equivalente más cercano al fragmento de Python sería

output = 'stackoverflow' 
puts output[0...-1] 

utilizó originalmente .. en lugar de ... (que funcionaría si lo hizo output[0..-2]); el primero siendo cerrado-cerrado el último siendo cerrado-abierto. Las rebanadas, y casi todo lo demás, en Python están abiertas.

+0

Puede elegir si un rango incluye su extremo. Dos puntos ('0 ..- 2') incluyen el último elemento, mientras que la forma de tres puntos (' 0 ...- 1') lo excluye. – Chuck

+0

@Chuck, gracias. Solo estaba editando para decirlo. :) –

1

Si todo lo que quiero hacer es eliminar el último carácter de la cadena, puede utilizar el método de 'picar', así:

puts output.chop 

o

puts output.chop! 
+1

Tenga en cuenta que 'chop' eliminará dos caracteres si la cadena termina en' \ r \ n'. –

1

Si sólo desea eliminar el último carácter, también se puede hacer

output.chop 
Cuestiones relacionadas