2010-09-29 16 views
10

Estoy tratando de aprender Ruby a través de los Koans, pero estoy atascado en el 6to paso.Ayuda con Ruby Koans # 6 - ¿Qué excepción ha sido atrapada?

Aquí está el código:

def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil 
    # What happens when you call a method that doesn't exist.  
    # The following begin/rescue/end code block captures the exception and 
    # make some assertions about it. 

    begin 
    nil.some_method_nil_doesnt_know_about 
    rescue Exception => ex 
    # What exception has been caught? 
    assert_equal __, ex.class 

    # What message was attached to the exception? 
    # (HINT: replace __ with part of the error message.) 
    assert_match(/__/, ex.message) 
    end 
end 

Yo sé que tengo que reemplazar el __ con algo que ver con el mensaje de error "NoMethodError" pero me parece que no puede entenderlo.

Este es el mensaje de error que me sale cuando ejecuto el "path_to_enlightenment.rb":

The answers you seek... 
    <"FILL ME IN"> expected but was <NoMethodError>. 

Realmente agradecería alguna orientación con esto - me está volviendo loco! Me encantaría saber la respuesta y una posible explicación. ¡Gracias!

Respuesta

12

La respuesta en este caso es "NoMethodError"

usted necesita los artículos a ambos lados de la, a ser igual, por lo cual son ambos ex.class va a hacer eso.

Luego tendrá que continuar a/__/Abajo.

+0

Gracias Elliot. – mmichael

+1

¿No es ese tipo de trampa? Hacer un pase de prueba simplemente haciendo un 1 == 1 no es válido, creo. Estoy tratando de responder a este también – BobC

+2

No, es preguntarte qué error obtendrás al usar un método que un objeto desconoce. Y porque assert equal tiene que ver con hacer 1 == 1. NoMethodError debe ser igual a NoMethodError. – Elliot

0

Solo estoy en Koen 83, pero en la mayoría de los Koens puede encontrar la "respuesta" en la sección apropiadamente titulada "The answers you seek..." inmediatamente después de "<"FILL ME IN"> expected but was". De vez en cuando he roto el marco RubyKoan y obtendré este gráfico antiguo ascii (no estoy seguro de si se supone que debe ser un cuenco de manos o un árbol, pero con suerte lo sabrás cuando lo veas); en estos casos, el mensaje de error debajo del gráfico ascii ha sido útil.

4

Tuve que poner la declaración assert_equal en parens para que esta pasara. Debe ser un error.

def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil 
    # What happens when you call a method that doesn't exist. The 
    # following begin/rescue/end code block captures the exception and 
    # make some assertions about it. 
    begin 
     nil.some_method_nil_doesnt_know_about 
    rescue Exception => ex 
     # What exception has been caught? 
     assert_equal(NoMethodError, ex.class) 

     # What message was attached to the exception? 
     # (HINT: replace __ with part of the error message.) 
     assert_match("undefined method", ex.message) 
    end 
    end 
+0

¿Qué mensaje de error recibiste cuando no tenías parientes? –

0

al rellenar el NoMethodError, también hay que rellenar el mensaje de error (algo en el sentido de " 'some_methd método no definido ..") tiene que sustituir todo el/__/con su término no sólo los guiones

3

Usted necesidad de sustituir el actual __ con

assert_equal NoMethodError, ex.class 
1

Carlo Ledesma tiene la respuesta correcta. (assert_equal NoMethodError, ex.class) No sé por qué la respuesta de Elliot está mejor calificada si alguien le pide que resuelva la ecuación, 2x + 2 = 10, no responde 2x + 2 = 2x + 2. Matemáticamente estarías en lo cierto, pero no es una respuesta.

1

Acabo de resolver este problema. Me he centrado en una línea a la vez, pero este método incluye dos elementos para cambiar, uno en la fila 16, uno en la fila 20. Ambos son necesarios para aprobar la lección.

16: assert_equal NoMethodError, ex.class

20: assert_match(/*some_method_nil_doesnt_know_about*/, ex.message)

Esperanza que ayuda a otra persona que se queda atascado!

1

Para la línea 20 Utilicé esto: assert_match(/some_method_nil_doesnt_know_about/, ex.message) No sé para qué son esos "/" caracteres. Tendré que investigarlo, pero funcionó.

Creo que el truco fue que el 'some_method_nil_doesnt_know_about estaba entre comillas simples en el mensaje, por lo que estaba buscando eso.

+0

Su respuesta realmente no responde la pregunta. ¿Puede editar su respuesta para reflejar mejor una respuesta real a la pregunta en lugar de comentarios? De lo contrario, publique un comentario (cuando tenga los privilegios para hacerlo). – xlm

0

Si elimina las citas se puede añadir un poco del mensaje de error

assert_match(/undefined method/, ex.message) 
Cuestiones relacionadas