2010-08-25 12 views
12

me han tratado recientemente de afilar mis habilidades carriles con esta herramienta:¿Hay una guía/clave de respuesta adicional para ruby ​​koans?

http://github.com/edgecase/ruby_koans

pero estoy teniendo problemas para pasar algunas pruebas. Además, no estoy seguro de si estoy haciendo algunas cosas correctamente, ya que el objetivo es solo pasar la prueba, hay muchas maneras de pasarlo y puedo estar haciendo algo que no cumple con los estándares.

¿Hay alguna manera de confirmar si estoy haciendo las cosas bien?

un ejemplo específico:

en about_nil,

def test_nil_is_an_object 
    assert_equal __, nil.is_a?(Object), "Unlike NULL in other languages" 
end 

por lo que se me dice que verifique si esa segunda cláusula es igual a un objeto (por lo que puedo decir nula es un objeto) o simplemente poner assert_equal true, nil.is_a?(Object) porque la declaración es verdadera?

y la siguiente prueba:

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 

Im adivinar que debo poner una cadena "No hay error método" en el assert_match, pero ¿y el assert_equal?

+0

interesante, no sabía nada de los koans, hay que probar ellos. Tal vez pedir ayuda o buscar consejos sobre cosas que no creas que sean correctas, pero al ser más específico, te darán mejores respuestas. – Chubas

Respuesta

9

assert_equal true, nil.is_a?(Object) es de hecho la solución correcta. La pregunta es "¿Están los objetos nils en Ruby o no?", Y en el caso de Ruby, sí lo son. Por lo tanto, para pasar la afirmación, debes afirmar la verdad de esa prueba.

En el segundo ejemplo, cuando llama a un método indefinido en nil, obtiene NoMethodError: undefined method 'foo' for nil:NilClass. Por lo tanto, la clase de excepción es NoMethodError, y el mensaje es undefined method 'foo' for nil:NilClass. Pruebe el comportamiento anómalo en una consola y vea qué obtiene de él, y luego aplique ese conocimiento a la prueba.

+1

¡gracias por el aviso! Entonces, ¿eso significa que tendré que confiar en mis instintos para saber si lo que hice fue correcto? ¿No hay forma de comprobar si lo que hice fue correcto y fiel a la convención de rubíes? – corroded

+0

a veces hay más de una forma correcta de expresar una respuesta, como en la vida real –

2

Bueno, al mantener el lema típico de TDD de Red-Green-Refactor, debe ejecutar la prueba (probablemente con un rastrillo en una consola separada) y ver cómo ocurre el fallo. Desde allí, le proporcionaron algunos datos sobre lo que se esperaba.

En cuanto al estilo, los koans realmente no enseñan eso. Debería encontrar y leer un código escrito en ruby ​​para tener una idea de las convenciones y expresiones idiomáticas típicas de la comunidad de ruby.

+0

¿Qué archivo usaría 'rake'? – isomorphismes

1

Recuerdo cuando hice esto que he tratado de pensar de la prueba y trató de poner en

<Answer> and <"Answer"> 

Lo que hay que recordar es que la clase real no tiene que estar en una cadena o algo . Así que la respuesta NO

ex.class, ex.class 

es Como se sugirió anteriormente, poner el código en el IRB y ejecutarlo.

(1..5).class == Range 

es una gran pista

5

¿Está ejecutando

ruby path_to_enlightenment.rb 

en el símbolo del sistema después de corregir cada prueba? Te dará mucha ayuda.

También "recuerde que el silencio a veces es la mejor respuesta": si no está satisfecho, no coloque nada y la herramienta lo ayudará.

2

La simplicidad es la clave con Ruby Koans - cuando lo comencé pensé que debe ser más difícil de lo que es, pero no lo es! Simplemente pregúntale a IRB la pregunta que te hace el Koans, y después de algunas, te da una idea. He escrito una pieza blog sobre él para ayudar a otros, también:

Ruby Koans Answers

Cuestiones relacionadas