2012-10-12 123 views
15

error de sintaxis, $ inesperado final, esperando keyword_end¿Hay una manera rápida de encontrar el extremo faltante en Ruby?

Todos hemos estado allí! Suponiendo que haya cambiado el código suficiente para que un vistazo rápido al git diff o similar no lo haga obvio, ¿hay alguna manera fácil de encontrar ese end que falta (menos que cambiar a un lenguaje basado en sangrías como Python)?

FWIW, uso Sublime Text 2 como mi editor.

+1

vim resaltado de sintaxis, y la capacidad de reformatear rápidamente la sangría del código me ha quitado todo ese dolor :-) Sublime Text es probable que tenga algo similar, ¿verdad? –

Respuesta

31

Si está utilizando Ruby 1.9, intente con el indicador -w al ejecutar su programa ruby.

# t.rb 
class Example 
    def meth1 
    if Time.now.hours > 12 
     puts "Afternoon" 
    end 
    def meth2 
    # ... 
    end 
end 

ruby t.rb 
=> t.rb:10: syntax error, unexpected $end, expecting keyword_end 

ruby -w t.rb 
=> t.rb:5: warning: mismatched indentations at 'end' with 'if' at 3 
    t.rb:9: warning: mismatched indentations at 'end' with 'def' at 2 
    t.rb:10: syntax error, unexpected $end, expecting keyword_end 

Fuente:

http://pragdave.blogs.pragprog.com/pragdave/2008/12/ruby-19-can-check-your-indentation.html

+2

¿Esto solo funciona si usa una sangría uniforme? (+1) –

+0

Eliminé todos los espacios en blanco y no me dio errores de iden- tificación no coincidentes, por lo que parece que la respuesta es sí. – sunnyrjuneja

+0

¿Puedo tener esta opción en Rails? Me estoy muriendo ahora ... –

1

Si está utilizando rieles, puede ejecutar el archivo problemático específicamente con el distintivo -w.

Si aún no puede encontrar la discrepancia ofensiva, entonces mi forma de resolver este problema es simplemente comentar trozos de código hasta que pueda aislar el área problemática.

En OS X puede usar el comando +/para comentar la parte de texto resaltada.

Cuestiones relacionadas